在不同的Web应用程序中使用Spring Security

时间:2019-04-25 06:59:18

标签: java spring spring-security web-applications

我正在构建服务器应用程序 ROOT.war (包含Spring安全性)和UI应用程序 viewer.war

是否可以在 ROOT.war 中声明适用于 viewer.war 的spring安全配置?

例如{strong}战争中的intercept-url

<security:intercept-url pattern="/viewer/**" access="isAuthenticated()"/>
<security:intercept-url pattern="/**" access="permitAll()"/>

我已经找到了使用hazelcast在Webapp之间“共享”会话信息的解决方案。

设置:

  

/-服务器Web应用程序,发布服务并提供弹簧安全性
  / viewer-UI Webapp,使用服务器服务并从服务器访问会话数据

修改
我正在共享会话,因为无法跨两个Web应用程序访问相同的会话数据。 成功登录后,将用户名存储在 ROOT 中的会话中,将无法在 / viewer 中使用(也可以使用文件会话存储)。
但这不是我要问的问题。
我想知道,即使另一个未使用Spring Security的Web应用程序称为 / viewer ,是否也使用spring-security过滤器。 ROOT 中的spring安全配置是否也适用于 / viewer 网络应用?

流量:

  • 用户在浏览器中请求/ viewer
  • 来自ROOT的spring security意识到用户未登录
  • 转到登录页面/ login
  • 成功登录后,转发到原始请求/查看者(会话中保留用户名)

1 个答案:

答案 0 :(得分:1)

我不确定您是否真正了解您的需求。 Spring Security是一个AOP框架,它使用过滤器拦截请求。每个过滤器都可以根据安全规则拒绝请求。

共享会话(在hazelcast,redis或其他服务器上)的需要来自于您拥有多个ROOT.war服务器,每个服务器负载均衡,并且对于每个用户,您都不知道请求的去向。这些会话必须在服务器之间共享。

我想您可以允许您的客户端访问hazelcast会话,但这的目的是什么?

编辑:我认为您想要的是某种代理。您需要将请求首先放在ROOT上,如果成功登录,则转到VIEWER。

您可以执行以下操作,但是对VIEWER的所有请求都必须通过ROOT。然后ROOT将请求发送到VIEWER。

您还可以采用其他方法,例如JWT。从ROOT生成JWT,并在VIEWER上要求它。