Spring Security игнорирует successHandler и failHandler - PullRequest
0 голосов
/ 23 сентября 2019

Я перевожу конфигурацию Spring Security с xml на Java Config.Однако, по какой-то причине, когда я пытаюсь использовать пользовательский sucessHandler или faultHandler, весна просто игнорирует их.Я что-то упустил?

Я посмотрел много примеров по интернету, но не могу найти, что не так с этой конфигурацией:

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.csrf().disable()
        .addFilterBefore(concurrentFilter, ConcurrentSessionFilter.class)
        .addFilterAfter(myFilter(), UsernamePasswordAuthenticationFilter.class)
        .sessionManagement()
        .sessionAuthenticationStrategy(sessionAuthenticationStrategy());

    http
        .authorizeRequests()
        .accessDecisionManager(accessDecisionManager())

        .antMatchers("/login.xhtml").permitAll()
        .antMatchers("/403.xhtml").access("IS_AUTHENTICATED_ANONYMOUSLY")   
        .antMatchers("/wrecked-db.xhtml").access("ROLE_USER")   
        .antMatchers("/admin.xhtml").access("ROLE_ADMIN")   

        .antMatchers("/**.xhtml").access("NO_ACCESS")

        .and().formLogin()
        .loginPage("/login.xhtml")
        .successHandler(customAuthenticationSuccessHandler)
        .failureHandler(customAuthenticationFailureHandler)
        .usernameParameter("j_username")
        .passwordParameter("j_password")

        .and().logout().logoutUrl("/logout.xhtml")
        .logoutSuccessUrl("/login.xhtml")
        .deleteCookies("JSESSIONID")

        .and().exceptionHandling().accessDeniedHandler(customAccessDeniedHandler);
}

1 Ответ

0 голосов
/ 24 сентября 2019

Я взял ваш и немного изменил, и этот работает нормально для меня,

http
  .csrf().disable()
  .authorizeRequests()
  .antMatchers("/403.xhtml").access("IS_AUTHENTICATED_ANONYMOUSLY")   
  .antMatchers("/wrecked-db.xhtml").access("ROLE_USER")   
  .antMatchers("/admin.xhtml").access("ROLE_ADMIN")   
  .antMatchers("/**.xhtml").access("NO_ACCESS")
  .antMatchers("/login*").permitAll().anyRequest().authenticated()
  .and().formLogin()
  .loginPage("/login.html")
  .loginProcessingUrl("/login")
  .successHandler(new AuthenticationSuccessHandler() {
      @Override
      public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
          System.out.println("AuthenticationSuccessHandler");

      }
  })
  .failureHandler(new AuthenticationFailureHandler() {
      @Override
      public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
          System.out.println("AuthenticationFailureHandler");

      }
  })
  .and().logout().logoutUrl("/logout.xhtml")
  .logoutSuccessUrl("/login.xhtml")
  .deleteCookies("JSESSIONID");

И моя страница входа будет выглядеть как

<form action="login" method='POST'>
    <table>
       <tr>
          <td>UN</td>
          <td><input type='text' name='username' value=''></td>
       </tr>
       <tr>
          <td>Pass</td>
          <td><input type='password' name='password' /></td>
       </tr>
       <tr>
          <td><input name="submit" type="submit" value="submit" /></td>
       </tr>
    </table>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...