2016-11-29 20 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の修飾Beanがありません

、ここで私の春-の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> 

私は

FailureHandlerの型AuthenticationSuccessHandler

と同じエラーのない予選Beanの例外を得た私のアプリを起動しようとすると、 。助けていただければ幸いです。

+0

には、セキュリティの設定にEnableWebSecurity' @ '追加してみてください。コンテキストに基づいて、私はあなたが通常これを自動的に処理するSpring Bootを使用しているとは思わない。 –

答えて

1

あなたのAuthenticationSuccessHandlerはBeanとして宣言されていません。 あなた 認証成功ハンドラ-REF =「nameOfYouSuccessHandlerBeanに」属性を経由して、タグであなたの春-のsecurity.xmlに

をBeanとしてそれを作成し、登録する必要がありますので、それは次のようになります:設定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

どのように設定Javaファイルの代わりにXMLでmySuccessHandlerを設定できますか? – Papich

+0

もちろん、 <豆ID = "org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler" クラス= "net.test.employee.dao.EmployeeDAOImpl"> <プロパティ名= "defaultTargedUrl" 値= "/コース"/> in spring.xml – Sobik

関連する問題