我有一个简单的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
页。
答案 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不会根据您的视图解析器自动更改逻辑。