2014-10-28 29 views
0

我在两页基本网站上有以下安全配置。Spring Security过滤掉每一个案例

<http use-expressions="true"> 
    <intercept-url pattern="/login*" access="permitAll" /> 
    <intercept-url pattern="/resources/**" access="permitAll" /> 
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 
    <form-login login-page='/login.jsp' 
     default-target-url="/index.jsp"   
     username-parameter="name" 
     password-parameter="password"/> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> 
      <user name="user" password="user" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

我没有使用自定义控制器,只使用默认的弹簧视图分辨率。

<mvc:annotation-driven /> 
<mvc:resources location="/resources/" mapping="/resources/**"/> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/view/"/> 
     <property name="suffix" value=".jsp"/> 
</bean> 

当我尝试访问默认页面index.jsp它重定向我到login.jsp页如我所料,但是当我把表单的数据不会送我去index.jsp页面重定向再次我到login.jsp。表单字段用name定义,如安全配置中的showin,表格actionindex.jsp

login.jsp形式:

<form method="post" action="<c:url value = '/index.jsp' />"> 
    <label for="inputEmail3">User</label> 
    <input name="name" type="text" id="inputEmail3" placeholder="User name" required> 

    <label for="inputPassword3">Password</label> 
    <input name="password" type="password" id="inputPassword3" placeholder="Password" required> 
    <button type="submit" class="btn btn-success btn-sm">Sign in</button> 
    <button type="reset" class="btn btn-default btn-sm">Reset</button> 
</form> 

我缺少什么?

+0

你能显示'login.jsp'吗? (我假设有一个,因为你使用自定义参数名称) – 2014-10-28 14:10:48

+0

我现在在login.jsp中显示表单。 – 2014-10-28 14:30:56

+0

它为什么要做任何事情。为什么表单提交给'index.jsp'?它应该是'j_spring_security_check'。 – 2014-10-28 14:33:59

回答

1

Spring安全使用包括表单登录的过滤器。默认情况下,当需要对用户进行身份验证时,DefaultLoginPageGeneratingFilter会生成包含HTML表单的页面,但您可以为其提供。

然后UsernamePasswordAuthenticationFilter截取表单的提交,默认情况下URL为j_spring_security_check,并且表单应该用POST提交或者spring安全会(默认情况下)抛出一个异常。

您应该为登录表单提交使用专门的URL。如果您不喜欢j_spring_security_check,您可以使用login-processing-url表单登录属性更改它,但它应该而不是与成功URL相同。