【发布时间】:2023-03-02 22:48:01
【问题描述】:
我的 web.xml 中有一个带有安全约束的 servlet,如下所示:
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
以上强制切换到 https 协议并且工作正常。但是在受保护的页面上,有一些 relative 链接到不安全的页面。当用户点击它们时,它们会通过我想要避免的 https 打开。将相对链接转换为绝对链接不是一种选择。 Servlet 规范没有提供强制不安全连接的方法,所以我将实现一个过滤器,将用户重定向到 http:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
if(!isSubjectToAuthConstraint(request)) {
// Check protocol and redirect to http if https
// ....
} else {
// Do nothing, managed by servlet spec
filterChain.doFilter(request, response);
}
}
所以我需要知道请求是否受到安全约束。我如何以编程方式知道它?有可能吗?
【问题讨论】:
标签: java servlets security servlet-filters