Spring安全性不知道spring mvc的视图前缀

时间:2015-06-05 22:29:07

标签: java spring jsp spring-mvc spring-security

我有一个简单的spring mvc + spring security应用

我在用户尝试.../hello时声明hello.jsp路径中的/WEB-INF/pages/页面正确显示:

@RequestMapping(value = "/hello")
public ModelAndView doLogin() {
    return new ModelAndView("hello");
}

dispatcher-servlet.xml

<mvc:annotation-driven/>

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

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

现在我在春季安全部门声明,当用户想要.../hello时,必须成为用户。

但是,当我尝试显示http://localhost:8080/hello/ hello.jsp页面时,不会强制进行身份验证。

当我尝试http://localhost:8080/pages/hello.jsp时,它会将我重定向到login页面,但为什么春天的安全措施没有注意到{mvc的prefix path

更新

security-config.xml

<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/pages/hello.jsp" access="hasRole('ROLE_USER')"/>
</security:http>

<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="sajjad" authorities="ROLE_USER" password="200200"/>
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

当我使用pattern="/hello"并且用户尝试http://localhost:8080/hello/时,用户不会重定向到login页。

2 个答案:

答案 0 :(得分:1)

我将intercept-url pattern更改为pattern="/hello/"并且有效。

答案 1 :(得分:0)

尝试从

更改此内容
 <security:intercept-url pattern="/pages/hello.jsp" access="hasRole('ROLE_USER')"/>

 <security:intercept-url pattern="/pages/hello*" access="hasRole('ROLE_USER')"/>

在您的拦截配置中,您特别要求仅检查hello.jsp而不是hello。 Spring Security不会根据您的视图解析器自动更改逻辑。