如何禁用解析作为url参数/从url传递的登录参数

应用程序记录所有请求url的。这意味着,至关重要的是不要使用url参数进行身份验证,因为这会导致日志成对出现的情况(login=abc&password=123)。因此,我已配置spring-

security为从读取参数request-body。通过将以下行添加到中来完成request-header

'Content-Type': 'application/x-www-form-urlencoded'

主体将是:

{'login':'admin', 'password':'password'}

很好,但是质量检查人员强迫我禁用通过网址参数进行身份验证的可能性。目前,到以下URL的POST也将进行身份验证:

https://example.com/foo?login=admin&password=password

有人知道禁用此选项的窍门吗?最好带有注释。

由于评论,我决定为我的问题添加更多细节。我spring-security的配置为WebSecurityConfigurerAdapter。我有

http.usernameParameter("login")

.passwordParameter("password")

(...)

这使得可以Spring同时在参数和正文中搜索登录数据。我希望禁用在URL中搜索这些参数。

回答:

这使得Spring在参数和正文中搜索登录数据。我希望禁用在URL中搜索这些参数。

我相信这是不可能的,因为这种行为不是由Spring而不是JavaEE本身实现的。

HttpServletRequest.getParameter文档状态:

以字符串形式返回请求参数的值,如果参数不存在,则返回null。请求参数是与请求一起发送的额外信息。对于HTTP Servlet,

但是您可以尝试使用看起来像这样的过滤器来改变它:

public class DisableGetAuthFiler extends OncePerRequestFilter {

...

@Override

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

filterChain.doFilter(

new HttpServletRequestWrapper(request) {

@Override

public String getParameter(String name) {

if (("login".equals(name) && getQueryString().contains("login"))

|| ("password".equals(name) && getQueryString().contains("password"))) {

return null;

} else {

return super.getParameter(name);

}

}

},

response

);

}

}

以上是 如何禁用解析作为url参数/从url传递的登录参数 的全部内容, 来源链接: utcz.com/qa/416586.html

回到顶部