gpt4 book ai didi

java - 我如何知道 HttpServletRequest 是否受 约束?

转载 作者:行者123 更新时间:2023-12-02 08:21:09 24 4
gpt4 key购买 nike

我的 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 协议(protocol)并且工作正常。但在安全页面上有一些指向不安全页面的相对链接。当用户点击它们时,它们会通过 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);
}
}

所以我需要知道请求是否受到安全约束。我如何以编程方式知道它?这可能吗?

最佳答案

嘿,正常情况下https端口是443。通过在浏览器中输入https://www.example.com:443/welcome.html浏览器将其扩展为 https://www.example.com/welcome.html

也许这就是您所需要的:

String serverAddress = "";    
String serverName = request.getServerName( );
String serverPort = "" + request.getServerPort( );

if( request.isSecure( ) ) {
serverAddress = "https://" + serverName + ":" + serverPort;
} else {
serverAddress = "http://" + serverName + ":" + serverPort;
}

关于java - 我如何知道 HttpServletRequest 是否受 <security-constraint> 约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5442381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com