Управление перенаправлением пользователя Spring Security - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в весенней безопасности, и любой может подсказать мне, как это сделать. Мой класс конфигурации 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/**");
    }

}

1 Ответ

0 голосов
/ 15 апреля 2020

Таким образом, вы хотите, чтобы только не прошедшие проверку пользователи имели доступ к "/" и "/ login" и только проверенные пользователи на других страницах. Я бы сделал что-то вроде этого:

http
  .authorizeRequests()
  .antMatchers("/web/**", "/action/**", "/cart/**", "/cart/xhr/**", "/buyer/**","/profile/**","/chat/**","/order/**")
    .authenticated()
  .and()
  .antMatchers("/", "/login")
    .anonymous()
  .and()
  .formLogin().loginPage("/login")
    .defaultSuccessUrl("/buyer/list", true)
  .and()
  .logout()
    .logoutSuccessUrl("/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...