0
所以我在Spring Boot中使用了Spring Security。我想讓我自己AuthenticationProvider
,使用DB在我自己的方式是,所以我用這個authenticate
方法做到了:爲什麼在註銷之後SpringSecurity一直給出相同的認證主體
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String email = authentication.getName();
String password = authentication.getCredentials().toString();
UserWithEmail userWithEmail = authService.getUserByEmail(email);
if (userWithEmail == null)
return null;
if (userWithEmail.getPassword().equals(password)) {
UsernamePasswordAuthenticationToken authenticated_user = new UsernamePasswordAuthenticationToken(userWithEmail, password, Arrays.asList(REGISTERED_USER_SIMPLE_GRANTED_AUTHORITY));
return authenticated_user;
} else {
return null;
}
}
這一點,如果我使用缺省的/登錄頁面的形式,作品好,以後如果我添加以下ModelAttribute
爲Controller
,它得到正確充滿UserWithEmail
對象:
@ModelAttribute("userwithemail")
public UserWithEmail userWithEmail(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();
if (principal instanceof UserWithEmail)
return (UserWithEmail) principal;
else
return null;
}
的問題是,如果我打/登錄註銷,它正確地顯示我登錄了呢? ,但如果我再次通過控制器,我仍然會得到與UserWithEmail
相同的對象本金和它的屬性authenticated=true
這是我的Java配置春季安全:
http
.formLogin()
.defaultSuccessUrl("/")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout().invalidateHttpSession(true).deleteCookies("JSESSIONID").permitAll().and()
.authorizeRequests()
.antMatchers("*/**").permitAll()
.antMatchers("/static/**").permitAll()
.antMatchers("/profile").hasRole(MyAuthenticationProvider.REGISTERED_USER_AUTH)
.and().authenticationProvider(getAuthProvider());
我是新來的Spring Security所以也許我失去了一些東西...誰能幫助?