spring mvc中如何基于域过滤请求

vhipe2zx  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(360)

我有一个war文件用于我的应用程序,我将使用2个域来访问它。例如,我想使用admin.mydomain.com/adminpage访问admin.jsp,以及我想使用local.mydomain.com访问的其他jsp页面。
此外,admin.jsp只能通过admin.mydomain.com访问,不能通过local.mydomain.com访问。如何在SpringSecurity/SpringMVC中实现这一点?spring框架中是否对此提供了支持?
这方面的任何帮助都会有帮助。谢谢

mrphzbgm

mrphzbgm1#

您可以实现 RequestMatcher ,也许像

HostOnlyRequestMatch(String relativePath, String hostname)

然后覆盖 boolean matches(HttpServletRequest request) 方法,如果 relativePathhostname 与请求、返回相同 true .
添加 requestMatcherhttp 这样地:

http
     .authorizeRequests()
         .requestMatcher(new HostOnlyRequestMatch("/admin", "admin.mydomain.com")).permitAll()
         .antMatchers("/admin").denyAll();
pdsfdshx

pdsfdshx2#

一种方法是配置代理(如nginx)将请求正确路由到应用服务器(如tomcat)。请阅读此处了解更多详细信息https://www.nginx.com/resources/admin-guide/reverse-proxy/

jogvjijk

jogvjijk3#

您可以从mvc控制器中的请求对象获取请求的url,如果它不是正确的域,那么您可以根据您的项目抛出或显示正确的错误。下面是代码片段

@Controller
@RequestMapping("/adminpage")
public class AdminPageController{

   @RequestMapping(method = RequestMethod.GET)
   public String getAdminPage(HttpServletRequest request) {
      String url = request.getRequestURL().toString();
      if(!url.contains("admin.mydomain.com")) {
          throw RuntimeException("Not accessible through this domain.");
          // You can implement your own logic of showing error here
      }
   }
}

相关问题