Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用SpringMVC和SpringSecurity的多租户webapp中使用表单登录_Java_Spring Mvc_Spring Security_Multi Tenant - Fatal编程技术网

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在发送重定向时应该遵守这样的规则(如果不遵守,您可以定义自定义的
    重定向策略

虽然我还没有测试过这个想法,也不能确定它是否有效

另请参见:


表单登录配置允许Spring在用户会话到期或输入错误url时将用户重定向到登录页面。我想让用户转到
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"
/>