Java 在使用SpringMVC和SpringSecurity的多租户webapp中使用表单登录
我使用Java 在使用SpringMVC和SpringSecurity的多租户webapp中使用表单登录,java,spring-mvc,spring-security,multi-tenant,Java,Spring Mvc,Spring Security,Multi Tenant,我使用Spring Security和SpringMVC创建了一个小而简单的webapp,我正在尝试将其转换为多租户应用程序。 我想要的概念是重用我拥有的实际JSP,并根据配置修改它们的内容,配置是我根据URL的路径确定的 示例: 客户1(abc)-URL: 客户#2(xyz)-URL: 因此,“租户”的名称是页面路径的前缀 我将控制器修改为如下所示: @Controller @RequestMapping("/{customer:[a-zA-Z0-9]+}/login.htm") public
Spring Security
和SpringMVC
创建了一个小而简单的webapp,我正在尝试将其转换为多租户应用程序。我想要的概念是重用我拥有的实际JSP,并根据配置修改它们的内容,配置是我根据URL的路径确定的 示例:
客户1(abc)-URL:
客户#2(xyz)-URL: 因此,“租户”的名称是页面路径的前缀 我将控制器修改为如下所示:
@Controller
@RequestMapping("/{customer:[a-zA-Z0-9]+}/login.htm")
public class LoginController
{
private static final Logger logger = Logger.getLogger(LoginController.class);
@RequestMapping
@ReadOnlyRequest
public String login(@PathVariable("customer") String customer, HttpServletRequest request)
{
// Do some 'customer' related actions here
return "login"; // Map to the 'login.jsp' view
}
}
我的视图解析程序配置为:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
但我不知道如何转换它以支持我的更改
有没有办法将其转换为以下内容:
<form-login
login-page="/${customer}/login.htm"
authentication-failure-url="/${customer}/login.htm?error=true"
login-processing-url="/${customer}/login_process"
default-target-url="/index.jsp"
always-use-default-target="true"
/>
一个可能的想法是使用URL重写,而不是手动处理租户标识符。通过这种方式,您可以将租户处理逻辑与代码完全解耦,例如,如下所示:
- 定义一个入站重写规则,该规则将
转换为/abc/login.html
,并将租户标识符保存为请求属性/login.html
- 您定义一个出站规则,将当前租户标识符附加到写入响应的URL。我认为Spring Security在发送重定向时应该遵守这样的规则(如果不遵守,您可以定义自定义的
)重定向策略
http://mydomain/abc/
,自动重定向到http://mydomain/abc/login.htm
。目前我只能重定向到http://mydomain/login.htm
。谢谢-URL重写过滤器似乎是最好的做法-我可能会自己编写一个,但总体思路正是我所需要的。我在这里展开了一个更有趣的讨论。。。但是我找不到答案。。你能发布关于这个的源代码吗?…我已经为此尝试了3天。@edaklij-在我实现我得到的建议之前,我正在做的项目被取消了。
<form-login
login-page="/${customer}/login.htm"
authentication-failure-url="/${customer}/login.htm?error=true"
login-processing-url="/${customer}/login_process"
default-target-url="/index.jsp"
always-use-default-target="true"
/>