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

时间:2016-12-20 23:31:34

标签: spring spring-mvc spring-security

我的应用程序有一个war文件,我将使用2个域来访问它。例如,我想使用admin.mydomain.com/adminpage和我想用local.mydomain.com访问的其他jsp页面访问admin.jsp。

此外,admin.jsp只能通过admin.mydomain.com访问,而不能通过local.mydomain.com访问。如何在spring-security / spring-mvc中执行此操作?在Spring框架中是否有支持?

任何有关这方面的帮助都会有所帮助。感谢。

3 个答案:

答案 0 :(得分:1)

您可以实施RequestMatcher,也可以像

一样
HostOnlyRequestMatch(String relativePath, String hostname)

然后覆盖boolean matches(HttpServletRequest request)方法,如果relativePathhostname与请求相同,则返回true

requestMatcher添加到http,如下所示:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以从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
      }
   }
}