有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring安全性过滤掉了每一个案例

我在一个两页的基本网站上有以下安全配置

<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>

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

<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,如安全配置中所示,表单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>

我错过了什么


共 (1) 个答案

  1. # 1 楼答案

    Spring security使用包括表单登录在内的过滤器。默认情况下,当需要对用户进行身份验证时,DefaultLoginPageGeneratingFilter会生成一个包含HTML表单的页面,但您也可以提供自己的表单

    然后UsernamePasswordAuthenticationFilter截取表单的提交,默认情况下在URL j_spring_security_check上,表单应该与POST一起提交,否则spring安全性将(默认情况下)抛出异常

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