Spring Security需要在BadCredentialsException上重定向到登录页面

杰耶什

我是Spring Security的新手。我遇到一个问题,由于特定原因身份验证失败时,我需要获取错误才能在“登录”页面上显示。

另外,我正在基于对URL的Web服务调用对用户进行身份验证。以下是我的配置,我也已配置authentication-failure-handler-ref

<security:http auto-config="true" use-expressions="true" access-denied-page="/accessDenied.jsp">
    <security:form-login  login-page="/login.jsp" authentication-failure-handler-ref="authenticationFailureHandler"
        default-target-url="/jsp/home"   />

    <security:intercept-url pattern="/login.jsp"
        access="permitAll" />

    <security:intercept-url pattern="/jsp/home"
        access="permitAll" />

    <security:intercept-url pattern="/jsp/*"
        access="isAuthenticated()" />


    <security:logout logout-url="/j_spring_security_logout" logout-success-url="/login.jsp?logout=success" 
        invalidate-session="true"  />

</security:http> 

    <bean id="ldapAuthenticationProvider" class="com.on.transport.authentication.MyAuthenticationProvider">
    </bean>

    <security:authentication-manager alias="authenticationManager">
         <security:authentication-provider ref='ldapAuthenticationProvider'/>   
    </security:authentication-manager>

    <bean id="customUserDetailsService" class="com.service.CustomUserDetailsService">
    </bean>     

<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
    <property name="exceptionMappings">
        <props>
            <prop key="org.springframework.security.authentication.BadCredentialsException">/errorPage.jsp?login_error=1</prop>
            <prop key="org.springframework.security.authentication.CredentialsExpiredException">/login.jsp?status=2</prop>
            <prop key="org.springframework.security.authentication.LockedException">/login.jsp?status=3</prop>
            <prop key="org.springframework.security.authentication.DisabledException">/login.jsp?status=4</prop>     
        </props>
    </property>
</bean> 

当我像下面这样写“ authentication-failure-url”时,一切工作正常,

<security:http  ......>
        <security:form-login  login-page="/login.jsp"
            default-target-url="/jsp/home"  authentication-failure-url="/login.jsp?status=1" />
                  ............
</security:http>

但是我需要以一种可以检查不同类型的异常的方式进行配置。

身份验证提供者

   public class MyAuthenticationProvider implements AuthenticationProvider {

    public Authentication authenticate(Authentication authentication)
            throws AuthenticationException {

        UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) authentication;

        String username = auth.getName();
        String password = (String)auth.getCredentials();

        UserUpdated user = null;
        int status=0;
        try{
            status = webservice.authenticate(username, password); 
               //webservice is object one is used to authenticate

            if(status==1){
                List<GrantedAuthority> grantedAuthoritiesList = new ArrayList<GrantedAuthority>();

                if(username!=null && (username.equals("test") || username.equals("[email protected]"))){
                    grantedAuthoritiesList.add(new GrantedAuthorityImpl("ROLE_ADMIN")); 
                }else{
                    grantedAuthoritiesList.add(new GrantedAuthorityImpl("ROLE_USER"));
                }

                return new UsernamePasswordAuthenticationToken(username, null, grantedAuthoritiesList);

            }else if(status==2){
                throw new BadCredentialsException("Incorrect Email Id or Password.");
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public boolean supports(Class<? extends Object> authentication) {
        return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
    }
}

我收到以下错误消息:

HTTP Status 401 - Authentication Failed: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken

相反,我需要重定向到带有错误消息的“登录”页面。

我可以看到日志为

org.springframework.security.authentication.BadCredentialsException: Incorrect Email Id or Password
    at com.on.transport.authentication.MyAuthenticationProvider.authenticate(MyAuthenticationProvider.java:98)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174)
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)

[AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication] - Authentication request failed: org.springframework.security.authentication.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
2013-09-07 13:05:42,685 DEBUG http-8080-2 [AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication] - Updated SecurityContextHolder to contain null Authentication
2013-09-07 13:05:42,686 DEBUG http-8080-2 [AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication] - Delegating to authentication failure handler org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler@3aabc1
2013-09-07 13:05:42,686 DEBUG http-8080-2 [SimpleUrlAuthenticationFailureHandler.onAuthenticationFailure] - No failure URL set, sending 401 Unauthorized error
2013-09-07 13:05:42,686 DEBUG http-8080-2 [HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper.saveContext] - SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
2013-09-07 13:05:42,687 DEBUG http-8080-2 [SecurityContextPersistenceFilter.doFilter] - SecurityContextHolder now cleared, as request processing completed

请帮助我确定我所缺少的。

丹妮

在这里看看:http : //www.codemarvels.com/2010/12/spring-security-3-how-to-display-login-errors/

总结起来,它说您应该在控制器中捕获中使用的不同映射authenticationFailureHandler然后,您可以重定向到任何jsp并使用所需的消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我想首先查看登录页面,即使任何用户想要访问其他页面也需要在Spring Security中重定向到登录页面

来自分类Dev

登录后,Spring Security再次重定向到登录页面

来自分类Dev

Spring Security:登录后重定向到登录页面

来自分类Dev

Spring Security:登录后重定向到登录页面

来自分类Dev

登录后,Spring Security再次重定向到登录页面

来自分类Dev

Spring Security总是重定向到登录页面

来自分类Dev

Spring Security和angular javascript重定向到登录页面

来自分类Dev

Spring Security和Angular javascript重定向到登录页面

来自分类Dev

Spring Security将自定义登录页面重定向到其自身-重定向过多

来自分类Dev

使用重定向:uri登录后将Spring Security重定向到页面

来自分类Dev

从Spring Security中排除从登录页面重定向的特定页面

来自分类Dev

Grails Spring Security-登录后总是重定向到特定页面吗?

来自分类Dev

Spring Security-能够在初始重定向到主页后返回登录页面

来自分类Dev

如果用户未经授权,Spring Security如何重定向到“登录”页面

来自分类Dev

使用Spring Security Core插件在Grails中登录后如何重定向到页面

来自分类Dev

使用Spring Security登录后无法将用户重定向到所需页面

来自分类Dev

Spring Security:登录后如何重定向到REST URL

来自分类Dev

Spring Security *始终*重定向到登录表单

来自分类Dev

Spring Security在登录后始终重定向到“ /”

来自分类Dev

使用spring登录后重定向到请求的页面

来自分类Dev

Spring Security重定向到禁止页面(403)

来自分类Dev

Spring Security重定向到禁止页面(403)

来自分类Dev

成功通过身份验证后,通过提供拒绝访问的异常,Spring Security重定向到登录页面

来自分类Dev

Spring Security-用户身份验证有时会失败,并且用户将被重定向到登录页面

来自分类Dev

即使我看到的页面未受保护,Spring登录也会将我重定向到登录页面

来自分类Dev

当他尝试进入登录页面时,使用 java spring-security 重定向已经登录的用户

来自分类Dev

Spring Security不会重定向到主页

来自分类Dev

Spring不重定向到HTML页面

来自分类Dev

Spring Security使用基于Java的配置重定向到登录表单

Related 相关文章

  1. 1

    我想首先查看登录页面,即使任何用户想要访问其他页面也需要在Spring Security中重定向到登录页面

  2. 2

    登录后,Spring Security再次重定向到登录页面

  3. 3

    Spring Security:登录后重定向到登录页面

  4. 4

    Spring Security:登录后重定向到登录页面

  5. 5

    登录后,Spring Security再次重定向到登录页面

  6. 6

    Spring Security总是重定向到登录页面

  7. 7

    Spring Security和angular javascript重定向到登录页面

  8. 8

    Spring Security和Angular javascript重定向到登录页面

  9. 9

    Spring Security将自定义登录页面重定向到其自身-重定向过多

  10. 10

    使用重定向:uri登录后将Spring Security重定向到页面

  11. 11

    从Spring Security中排除从登录页面重定向的特定页面

  12. 12

    Grails Spring Security-登录后总是重定向到特定页面吗?

  13. 13

    Spring Security-能够在初始重定向到主页后返回登录页面

  14. 14

    如果用户未经授权,Spring Security如何重定向到“登录”页面

  15. 15

    使用Spring Security Core插件在Grails中登录后如何重定向到页面

  16. 16

    使用Spring Security登录后无法将用户重定向到所需页面

  17. 17

    Spring Security:登录后如何重定向到REST URL

  18. 18

    Spring Security *始终*重定向到登录表单

  19. 19

    Spring Security在登录后始终重定向到“ /”

  20. 20

    使用spring登录后重定向到请求的页面

  21. 21

    Spring Security重定向到禁止页面(403)

  22. 22

    Spring Security重定向到禁止页面(403)

  23. 23

    成功通过身份验证后,通过提供拒绝访问的异常,Spring Security重定向到登录页面

  24. 24

    Spring Security-用户身份验证有时会失败,并且用户将被重定向到登录页面

  25. 25

    即使我看到的页面未受保护,Spring登录也会将我重定向到登录页面

  26. 26

    当他尝试进入登录页面时,使用 java spring-security 重定向已经登录的用户

  27. 27

    Spring Security不会重定向到主页

  28. 28

    Spring不重定向到HTML页面

  29. 29

    Spring Security使用基于Java的配置重定向到登录表单

热门标签

归档