Integrace s google apps- přihlašování účtem google.
							parent
							
								
									d886e1e4f4
								
							
						
					
					
						commit
						17deee8b21
					
				@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					package info.bukova.isspst.services.users;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import info.bukova.isspst.Constants;
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.Role;
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					import org.springframework.security.core.userdetails.AuthenticationUserDetailsService;
 | 
				
			||||||
 | 
					import org.springframework.security.core.userdetails.UserDetails;
 | 
				
			||||||
 | 
					import org.springframework.security.core.userdetails.UsernameNotFoundException;
 | 
				
			||||||
 | 
					import org.springframework.security.openid.OpenIDAttribute;
 | 
				
			||||||
 | 
					import org.springframework.security.openid.OpenIDAuthenticationToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class GmailUserService implements AuthenticationUserDetailsService<OpenIDAuthenticationToken> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final Logger logger = LoggerFactory.getLogger(GmailUserService.class); 
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private UserService userService;
 | 
				
			||||||
 | 
						private RoleService roleService;
 | 
				
			||||||
 | 
						private String restrictDomain;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public GmailUserService(UserService userService, RoleService roleService) {
 | 
				
			||||||
 | 
							this.userService = userService;
 | 
				
			||||||
 | 
							this.roleService = roleService;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public UserDetails loadUserDetails(OpenIDAuthenticationToken token)
 | 
				
			||||||
 | 
								throws UsernameNotFoundException {
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							String email = null;
 | 
				
			||||||
 | 
							String firstName = null;
 | 
				
			||||||
 | 
							String lastName = null;
 | 
				
			||||||
 | 
							List<OpenIDAttribute> attributes = token.getAttributes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (OpenIDAttribute attribute : attributes) {
 | 
				
			||||||
 | 
								if (attribute.getName().equals("email")) {
 | 
				
			||||||
 | 
									email = attribute.getValues().get(0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (attribute.getName().equals("firstName")) {
 | 
				
			||||||
 | 
									firstName = attribute.getValues().get(0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (attribute.getName().equals("lastName")) {
 | 
				
			||||||
 | 
									lastName = attribute.getValues().get(0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							String userAndDomain[] = email.split("@");
 | 
				
			||||||
 | 
							String username = userAndDomain[0];
 | 
				
			||||||
 | 
							String domain = userAndDomain[1];
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (restrictDomain != null && !restrictDomain.isEmpty() && !restrictDomain.equals(domain)) {
 | 
				
			||||||
 | 
								logger.warn("Try to login from foreign domain");
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								throw new UsernameNotFoundException("Email from foreign domain");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							UserDetails user;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								user = userService.loadUserByUsername(username);
 | 
				
			||||||
 | 
							} catch (UsernameNotFoundException e) {
 | 
				
			||||||
 | 
								logger.info("Username not found in database. Creating one");
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								User usr = new User();
 | 
				
			||||||
 | 
								usr.setUsername(username);
 | 
				
			||||||
 | 
								usr.setFirstName(firstName);
 | 
				
			||||||
 | 
								usr.setLastName(lastName);
 | 
				
			||||||
 | 
								usr.setEmail(email);
 | 
				
			||||||
 | 
								usr.setEnabled(true);
 | 
				
			||||||
 | 
								usr.setNotify(true);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								Role role = roleService.getRoleByAuthority(Constants.ROLE_USER);
 | 
				
			||||||
 | 
								usr.addAuthority(role);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								userService.grantAdmin();
 | 
				
			||||||
 | 
								userService.add(usr);
 | 
				
			||||||
 | 
								userService.removeAccess();
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								user = userService.loadUserByUsername(username);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return user;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void setRestrictDomain(String restrictDomain) {
 | 
				
			||||||
 | 
							this.restrictDomain = restrictDomain;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					gmail.restrictDomain=
 | 
				
			||||||
@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<beans xmlns="http://www.springframework.org/schema/beans"
 | 
				
			||||||
 | 
						xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
						xmlns:security="http://www.springframework.org/schema/security"
 | 
				
			||||||
 | 
						xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 | 
				
			||||||
 | 
							http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<bean id="gmailUserService" class="info.bukova.isspst.services.users.GmailUserService">
 | 
				
			||||||
 | 
							<constructor-arg ref="userService"/>
 | 
				
			||||||
 | 
							<constructor-arg ref="roleService"/>
 | 
				
			||||||
 | 
							<property name="restrictDomain" value="${gmail.restrictDomain}"/>
 | 
				
			||||||
 | 
						</bean>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</beans>
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								| 
		 After Width: | Height: | Size: 7.6 KiB  | 
@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<html
 | 
				
			||||||
 | 
						xmlns="native"
 | 
				
			||||||
 | 
						xmlns:u="zul"
 | 
				
			||||||
 | 
						xmlns:zk="zk">
 | 
				
			||||||
 | 
						<head>
 | 
				
			||||||
 | 
							<title>${labels.Loggingin}</title>
 | 
				
			||||||
 | 
						</head>
 | 
				
			||||||
 | 
						<body style="height: 100%; padding: 0 5px;">
 | 
				
			||||||
 | 
							<div style="height: 15%" />
 | 
				
			||||||
 | 
							<div align="center">
 | 
				
			||||||
 | 
								<u:include src="login.zul" />
 | 
				
			||||||
 | 
								<br/>
 | 
				
			||||||
 | 
								<img src="img/google.png" alt="Google"/>
 | 
				
			||||||
 | 
								<form action="j_spring_openid_security_check" method="post">
 | 
				
			||||||
 | 
									<input name="openid_identifier" type="hidden" value="https://www.google.com/accounts/o8/id"/>
 | 
				
			||||||
 | 
					   				<input type="submit" value="${labels.LoginViaGoogle}" class="nicebutton"/>
 | 
				
			||||||
 | 
								</form>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue