2016-11-29 3 views
0
@Component("MyAuthFilter") 
     public class MyAuthFilter extends UsernamePasswordAuthenticationFilter { 

    private int errCode = 0; 

    @Autowired 
    @Qualifier("authenticationManager") 
    //@Override 
    public void setAuthenticationManager(AuthenticationManager authenticationManager, AuthenticationSuccessHandler successHandler, AuthenticationFailureHandler failureHandler) { 
     super.setAuthenticationManager(authenticationManager); 
     this.setAuthenticationSuccessHandler(successHandler); 
     this.setAuthenticationFailureHandler(failureHandler); 
    } 

    @Override 
    public AuthenticationFailureHandler getFailureHandler() { 
     SimpleUrlAuthenticationFailureHandler handler = new SimpleUrlAuthenticationFailureHandler(); 
     handler.setDefaultFailureUrl("/login?error=" + errCode); 
     return handler; 
    } 

    @Override 
    public AuthenticationSuccessHandler getSuccessHandler() { 
     SavedRequestAwareAuthenticationSuccessHandler handler = new SavedRequestAwareAuthenticationSuccessHandler(); 
     handler.setDefaultTargetUrl("/courses"); 
     return handler; 
    } 

    @Override 
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) 
      throws AuthenticationException { 

     System.out.println("running my own version of UsernmePasswordFilter ... "); 

     String login = (String) request.getParameter("login"); 
     String password = (String) request.getParameter("password"); 
     errCode = validate(login,password);  
     UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(login, password); 
     // Allow subclasses to set the "details" property 
     setDetails(request, authRequest); 

     return this.getAuthenticationManager().authenticate(authRequest); 
    } 

    private int validate(String login,String password){ 

     if (login.isEmpty() && password.isEmpty()){ 
      return 4; 
     } 
     if (login.isEmpty() && !password.isEmpty()){ 
      return 2; 
     } 
      if (!login.isEmpty() && password.isEmpty()){ 
      return 3; 
     } 

     return 1; 
    } 
} 

это MyAuthFilter.Весна безопасности Нет квалификационного компонента типа AuthenticationSuccessHandler и AuthenticationFalureHandler

и вот моя весна-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security" 
      xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security-4.2.xsd"> 

    <http auto-config="false" use-expressions="true"> 
     <intercept-url pattern="/courses*" access="hasRole('ROLE_USER')" /> 
     <custom-filter before="FORM_LOGIN_FILTER" ref="MyAuthFilter" /> 
     <form-login 
      login-page="/login" 
      default-target-url="/courses" 
      authentication-failure-url="/login" 
      username-parameter="loginField" 
      password-parameter="passwordField" /> 
     <csrf disabled="true" /> 
    </http> 

    <authentication-manager alias="authenticationManager"> 
     <authentication-provider> 
      <user-service> 
       <user name="ars" password="1234" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 

</beans:beans> 

, когда я пытаюсь запустить мое приложение я получил исключения для

Нет квалификационная рожкового типа AuthenticationSuccessHandler

и ту же ошибку для FailureHandler , Буду признателен за любую помощь.

+0

Попробуйте добавить '@ EnableWebSecurity' к вашей конфигурации безопасности. Исходя из контекста, я не думаю, что вы используете Spring Boot, который обычно позаботится об этом автоматически. –

ответ

1

Ваш AuthenticationSuccessHandler не объявлен как компонент. Вы должны создать его в качестве компонента и зарегистрироваться в вашей пружинного security.xml в теге с помощью атрибута аутентификации неуспеха-обработчик-исх = «nameOfYouSuccessHandlerBean»

Так будет выглядеть следующим образом: некоторые где в конфигурации файлов Java :

@Bean 
    public AuthenticationSuccessHandler mySuccessHandler() { 
     SavedRequestAwareAuthenticationSuccessHandler handler = new SavedRequestAwareAuthenticationSuccessHandler(); 
     handler.setDefaultTargetUrl("/courses"); 
     return handler; 
    } 

и в весенне-security.xml

<form-login 
      login-page="/login" 
      default-target-url="/courses" 
      authentication-failure-url="/login" 
      username-parameter="loginField" 
      authentication-success-handler-ref="mySuccessHandler"    
      password-parameter="passwordField" /> 
+0

Как настроить mySuccessHandler с помощью xml вместо java-файла конфигурации? – Papich

+0

Конечно, <боб ID = класс "org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler" = "net.test.employee.dao.EmployeeDAOImpl"> <имя = значение свойства "defaultTargedUrl" = "/ курсы "/> в вашей spring.xml – Sobik

Смежные вопросы

 Смежные вопросы