关于这个问题,我已经进行了大量的谷歌搜索,但到目前为止,我找不到任何关于集成 Struts2 和 Spring Security 的教程。
我的问题是如何集成 Spring Security 和 Struts2?
我希望限制某些操作或页面的地方,例如管理页面/url 只能由管理员访问,以及其他类似的东西,如果用户试图访问该页面,他或她将被重定向到另一个页面。
最佳答案
假设您需要保护可在 /admin/*
路径上访问的内容。您需要在 web.xml
中声明 Spring Security Filter,Struts 过滤器应该在后面,这样如果您正在访问 /admin
,它将由 Spring Security 处理首先请求,并且能够根据用户的角色让它通过或阻止它:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后声明您的 spring 安全上下文:
<http>
<intercept-url pattern="/*" filters="none" />
<intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<form-login login-page="/login" />
<logout logout-url="/logout" />
</http>
我建议您使用 struts2-convention
插件,这样像 /login
这样的 URL 会自动绑定(bind)到一个名为 com.foo.bar 的类.actions.LoginAction
。 LogoutAction
现在 /admin/*
下的内容应该由 Spring Security 保护,其余的应该直接转发给 Struts2 过滤器。
最后,在您的 JSP 中,您可以检查某人是否是管理员:
<sec:authorize access="hasRole('ROLE_ADMIN')">
<p>you are an admin</p>
</sec:authorize>
其余部分可以在任何 Spring Security 教程中找到。真正重要的是过滤器声明的顺序,spring security 必须在第一位。
编辑: google 搜索,也有this link这对你有帮助。
关于java - Spring Security和Struts2如何整合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14333999/