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 }