我的应用程序有一个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框架中是否有支持?
任何有关这方面的帮助都会有所帮助。感谢。
答案 0 :(得分:1)
您可以实施RequestMatcher
,也可以像
HostOnlyRequestMatch(String relativePath, String hostname)
然后覆盖boolean matches(HttpServletRequest request)
方法,如果relativePath
和hostname
与请求相同,则返回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
}
}
}