你好。
我正在使用Spring Boot自动配置应用程序的Spring安全性。我的目标是设置基本认证,使得在401错误时不会显示标准浏览器的基本认证表单。从谷歌上了解到,要实现此目的,需要将默认的“WWW-Authenticate”头更改为与“Basic xxxxx”不同的内容。
为了做到这一点,我声明了一个过滤器:
@Bean
@Order(Integer.MAX_VALUE)
public Filter customAuthFilter() {
return new Filter() {
@Override
public void init(FilterConfig fc) throws ServletException {
}
@Override
public void doFilter(ServletRequest sreq, ServletResponse sresp, FilterChain fc) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) sreq;
HttpServletResponse resp = (HttpServletResponse) sresp;
fc.doFilter(req, resp);
log.info("filter");
log.info("status " + resp.getStatus());
if(resp.getStatus() == 401) {
resp.setHeader("WWW-Authenticate", "Client-driven");
}
}
@Override
public void destroy() {
}
};
从日志中我看到我的过滤器已经被应用程序成功识别并参与了响应处理(我可以看到来自doFilter的日志消息)。但是实际上,浏览器收到的响应仍然包含标准的“WWW-Authenticate”头。似乎有人覆盖了我的头,但我不知道确切是谁。
请问有人能给些建议吗?