Я новичок в весенней безопасности, и любой может подсказать мне, как это сделать. Мой класс конфигурации Spring Security упоминается ниже: я сделал мою домашнюю страницу "/" видимой для всех пользователей. поэтому я не использовал "/" в http.antmatchs ("/") на домашней странице, на моей навигационной панели есть ссылка для "входа и регистрации". после успешного входа в систему пользователь перенаправляет на конечную точку «покупатель / список», которую я упоминаю в конфигурации. я хочу, чтобы «пользователь входа в систему» не смог снова зайти на домашнюю страницу. для этого я также использую
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
для контроллера отображения «/», но он генерирует исключение nullPointerException. любой может направить меня, как мне действовать. если есть другой подход, пожалуйста, укажите.
Configuration
@EnableWebSecurity
public class SecureConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Value("${winni.auth.exit}")
private String authExit;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatchers()
.antMatchers("/login", "/web/**", "/action/**", "/cart/**", "/cart/xhr/**", "/buyer/**","/profile/**","/chat/**","/order/**")
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/buyer/list", true).permitAll().and()
.logout().logoutSuccessUrl(authExit);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/assets/**");
}
}