[英]Spring Security filters out every case
我在两页的基本网站上有以下安全配置。
<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,表单action
为index.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>
我想念什么?
Spring Security使用包括表单登录在内的过滤器。 默认情况下,当需要验证用户身份时, DefaultLoginPageGeneratingFilter
生成一个包含HTML表单的页面,但是您也可以提供它。
然后, UsernamePasswordAuthenticationFilter
截取表单的提交,默认情况下在URL j_spring_security_check
,并且应使用POST提交表单,否则spring安全(默认情况下)将引发Exception。
您应该使用专用URL提交登录表单。 如果你不喜欢j_spring_security_check
您可以用更改login-processing-url
形式登录属性,但它不应该是一样的成功URL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.