2013-04-08 61 views
4

我是新来的春季安全,所以我试图用Spring MVC中来处理无效的登录,但结束了找不到网页404春季安全无效的登录处理

在我的安全-context.xml中,我有这AuthenticationProvider处理所有的身份验证登录,所以只是基本上检查用户的帐户和密码,但出于某种原因,它一直说,authentication-failure-url没有找到404,每当有一个无效的登录尝试。

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

    <bean id="preAuthenticationFilter" 
     class="authentication.PreAuthenticationFilter" 
     p:authenticationManager-ref="authenticationManager" /> 

    <security:http auto-config="true"> 
    <security:intercept-url pattern="/member/**" access="MEMBER" requires-channel="https"/> 
    <security:form-login login-page="/login" 
         username-parameter="email" 
         password-parameter="password" 
         default-target-url="/member/" 
         authentication-failure-url="/loginfailed" /> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthenticationFilter" /> 
    </security:http> 

但我确实有一个相应的控制器侦听该URL模式处理无效登录。

@Controller 
public class LoginController 
{ 
    @RequestMapping(value = "/loginfailed", method = RequestMethod.GET) 
    public String loginError(ModelMap model) 
    {  
     model.addAttribute("error", "true"); 
     return "login"; 
    } 
} 

** * *UPDATE* ** * *

在某些点上我AuthenticationProvider验证用户,并抛出一个异常(我不不知道是否有问题)每当用户有错误的凭证

@Component 
public class AuthenticationProvider{ 
    private User validateUser(String userName, String password) 
    { 
     try{ 
      //authenticate user's info 
      ....... 
     } 
     catch (UnauthorizedAccessException e) 
     { 
      throw new BadCredentialsException(e); 
     } 
    } 
} 
+0

不'方法= RequestMethod.GET'工作? – Xaerxess 2013-04-08 15:57:03

+0

不......我尝试了GET和POST – peter 2013-04-08 15:58:03

+4

在我看来,这不是Spring安全问题,而是MVC配置 - 对'/ loginfailed'返回200状态执行简单的POST/GET请求吗? – Xaerxess 2013-04-08 16:09:48

回答

4

(作为后续评论。)从j_spring_security_check 302 statu和BadCredentialsException都是正确的。它看起来像你的控制器根本没有注册。你有没有想到使用@Controller注释bean是不足以使其工作的? Quoting documentation

您可以明确定义注释控制器豆,使用调度的情况下标准 的Spring bean定义。然而, @Controller原型还允许自动检测,并与 弹簧一般支持检测 类路径中的组件类并自动注册它们的bean定义。

要启用此类注释控制器的自动检测,请将​​ 组件扫描添加到您的配置中。如示于以下XML片段使用弹簧上下文 架构:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="com.example"/> 

    <!-- ... --> 

</beans> 

(假设LoginController是com。示例包)。

简单的bean声明可以使用的,而不是组件扫描:

<bean class="com.example.LoginController" />