Я использую Spring Security для входа в свой проект. Это мой код:
@Configuration
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier(value = "loginServiceImpl")
private UserDetailsService userDetailsService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login**", "/js/**", "/css/**")
.permitAll()
.antMatchers("/role**")
.access("hasRole('ADMIN') and hasRole('ROLE')")
....
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll()
.and().exceptionHandling().accessDeniedPage("/403");
}
}
и
@Service
public class LoginServiceImpl implements UserDetailsService {
@Autowired
UserDao loginDao;
@Override
public UserDetails loadUserByUsername(String username) {
try {
net.liyan.psc.main.entity.main.User user = loginDao.findByUserNameForLogin(username);
if (user == null) throw new UsernameNotFoundException("User not found.");
Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
for (Role role : loginDao.getAllRoleByUser(user)) {
grantedAuthorities.add(new SimpleGrantedAuthority(role.getCode()));
}
}
return new org.springframework.security.core.userdetails.User(
user.getUsername(),
user.getPassword(),
true,
true,
true,
true,
grantedAuthorities);
} catch (UsernameNotFoundException ex) {
throw new UsernameNotFoundException("User not found.");
}
}
}
это работает.Я могу получить текущего пользователя с помощью
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Возможно добавить новую роль для текущего пользователя (userDetails) после успешного входа пользователя.Я могу получить userDetails.getAuthorities (), но нет никакого метода установки или добавления для добавления новых ролей.