java - Spring Security和Struts2如何整合

标签 java spring security struts2 spring-security

关于这个问题,我已经进行了大量的谷歌搜索,但到目前为止,我找不到任何关于集成 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.LoginActionLogoutAction

相同

现在 /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/

相关文章:

java - 将 SpringCloud Finchley 升级到 RELEASE 时缺少 AmazonS3Client Bean

Java 未经检查的方法调用

java - 如何动态地将外部定义的bean定义添加到Spring上下文中?

Spring Cloud 配置允许在 Spring Boot 中覆盖

.htaccess - Cacheleak漏洞magento var文件夹问题

php - 保护 mySQL 数据

java - 在 Java 中避免依赖 hell 的首选步骤是什么?

java - 同一 Controller 的多个 Spring MVC validator

c# - 在 .NET 4.0 中,如何 'sandbox' 一个内存程序集并执行一个方法?

java - 用python读取.jar文件的源代码