1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.student.security.spring;
17  
18  import org.kuali.rice.core.config.Config;
19  import org.kuali.rice.core.config.ConfigContext;
20  import org.kuali.rice.kim.bo.entity.dto.KimPrincipalInfo;
21  import org.kuali.rice.kim.service.IdentityService;
22  import org.kuali.student.common.util.security.UserWithId;
23  import org.springframework.security.GrantedAuthority;
24  import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
25  import org.springframework.security.userdetails.User;
26  import org.springframework.security.userdetails.UserDetails;
27  import org.springframework.security.userdetails.UserDetailsService;
28  import org.springframework.security.userdetails.UsernameNotFoundException;
29  import org.springframework.security.util.AuthorityUtils;
30  
31  
32  
33  
34  
35  
36  
37  public class KSRiceDefaultUserDetailsService implements UserDetailsService{
38  
39      private UserWithId ksuser = null;
40      private String password = "";
41     
42      private boolean enabled = true;
43      private boolean nonlocked = true;
44      
45      private IdentityService identityService = null;
46      
47      
48      
49      private GrantedAuthority[] authorities = 
50          AuthorityUtils.commaSeparatedStringToAuthorityArray("ROLE_KS_ADMIN, ROLE_KS_USER");
51      
52      public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
53          if(username==null || username.equals("")){
54              throw new UsernameNotFoundException("Username cannot be null or empty");
55          }
56          
57          Config config = ConfigContext.getCurrentContextConfig();
58          String ksIgnoreRiceLogin = config.getProperty("ks.ignore.rice.login");
59          
60          
61          
62          if(Boolean.valueOf(ksIgnoreRiceLogin) == true){
63              return new User(username, password, enabled, true, true, nonlocked, authorities);
64          }
65          
66          KimPrincipalInfo kimPrincipalInfo = null;
67          kimPrincipalInfo = identityService.getPrincipalByPrincipalName(username);
68          
69          String userId;
70          if (null != kimPrincipalInfo) {
71              username = kimPrincipalInfo.getPrincipalName();
72              userId = kimPrincipalInfo.getPrincipalId();
73          } else {
74          
75          
76          
77              throw new KimUserNotFoundException("Invalid username or password");  
78          }
79          ksuser = new UserWithId(username, password, enabled, true, true, nonlocked, authorities);
80          ksuser.setUserId(userId);
81          return ksuser;
82      }
83      
84      public UserDetails loadUserByUsernameAndToken(String username, UsernamePasswordAuthenticationToken authentication) throws UsernameNotFoundException {
85          if(username==null || username.equals("")){
86              throw new UsernameNotFoundException("Username cannot be null or empty");
87          }
88          
89          Config config = ConfigContext.getCurrentContextConfig();
90          String ksIgnoreRiceLogin = config.getProperty("ks.ignore.rice.login");
91          
92          
93          
94          if(Boolean.valueOf(ksIgnoreRiceLogin) == true){
95              return null;
96          }
97          
98          password = (String)authentication.getCredentials();
99          
100         KimPrincipalInfo kimPrincipalInfo = null;
101         
102         kimPrincipalInfo = identityService.getPrincipalByPrincipalNameAndPassword(username, password);
103         String userId;
104         if (null != kimPrincipalInfo) {
105             username = kimPrincipalInfo.getPrincipalName();
106             userId = kimPrincipalInfo.getPrincipalId();
107         } else {
108         
109         
110         
111             
112             throw new KimUserNotFoundException("Invalid username or password");  
113         }
114         ksuser = new UserWithId(username, password, enabled, true, true, nonlocked, authorities);
115         ksuser.setUserId(userId);
116         return ksuser;
117     }
118     
119     public void setAuthorities(String[] roles) {
120         this.authorities =  AuthorityUtils.stringArrayToAuthorityArray(roles);
121     }
122 
123     public void setIdentityService(IdentityService identityService) {
124         this.identityService = identityService;
125     }
126 }