我在生产中遇到大量错误
org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.
据推测,这是由我的url中的//
引起的,但我不知道它们是从哪里来的。我如何知道是什么url导致了这种情况?当你不知道发生了什么时,很难修复。
我确实意识到有一个相关的问题,但这并没有解决如何诊断有问题的URL。它只解决了如何关闭严格的防火墙。
我的问题是,我有一个使用Spring Security的配置,并且还在控制器类上启用了@CrossOrigin注释,下面是我刚刚添加到我的配置方法中的内容。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// ...
http.cors(); //Only this
}
}
你也可以在这里查阅参考:https://www.baeldung.com/spring-cors
Http防火墙
将在过滤器链
中一开始就检查请求,甚至在调用安全过滤器链
中的任何过滤器之前。因此,您最好的选择是设置一个
放置在过滤器链Proxy
前面的过滤器,并且此过滤器
用于捕获请求回复异常
并记录其详细信息。
(1) 实现捕获此异常的筛选器:
public class LogFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
try {
chain.doFilter(request, response);
} catch (Exception e) {
if( e instanceof RequestRejectedException ) {
logger.info("Catch RequestRejectedException....");
logger.info((HttpServletRequest)request).getRequestURI()); //log the request detail such as its URI
}
throw e;
}
}
}
(2) 配置并注册过滤器
@Bean
public FilterRegistrationBean someFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new LogFilter());
registration.addUrlPatterns("/*");
registration.setOrder(RegistrationBean.HIGHEST_PRECEDENCE); //Must has higher precedence than FilterChainProxy
return registration;
}
很抱歉没有把这个作为评论发表,但是我还不能这么做。
您是否尝试过另一个日志级别并记录到文件中?我现在不在家,但如果不在家,请试试下面这几行:
logging.level.=ERROR
logging.file=/home/spring.log
也可以尝试将DEBUG作为日志级别
其他为什么(虽然有点笨拙)试图用/
替换每个//
作为第三个选项,我找到了这个脚本,你可能会让它工作。
@ExceptionHandler(RequestRejectedException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleRequestRejectedException(final HttpServletRequest request, final RequestRejectedException ex)
{
if (LOGGER.isLoggable(Level.INFO))
{
LOGGER.log(Level.INFO, "Request Rejected", ex);
}
LOGGER.log(Level.WARNING, "Rejected request for [" + request.getRequestURL().toString() + "]. Reason: " + ex.getMessage());
return "errorPage";
}
祝你好运,如果你不成功,我明天就回来了。
不确定这是Spring 5.0.3的一个bug,还是我这边的一个修复东西的新特性。 升级后,我得到了这个错误。有趣的是,这个错误只出现在我的本地机器上。使用HTTPS协议的测试环境中的相同代码工作正常。 继续… 我之所以出现此错误,是因为我加载结果JSP页面的URL是。正在评估代码为我提供结果。如果我将JSP页面的URL固定到此,一切正常。 所以我的问题是,我是否应该从代码中的< code>JSP
问题内容: 不知道这是Spring 5.0.3的错误还是新功能可以修复我的问题。 升级后,出现此错误。有趣的是,此错误仅在我的本地计算机上。使用HTTPS协议的测试环境中的相同代码可以正常工作。 继续… 我收到此错误的原因是因为我用于加载结果JSP页面的URL是。评估代码会给我结果。如果我将JSP页面的URL修复为此,则一切正常。 所以我的问题是,我应该/从JSP代码的路径中删除吗,因为这是今后的
我正在尝试将一个spring应用程序迁移到spring-boot。在tomcat服务器上运行应用程序时,我收到以下错误: 请求被拒绝,因为URL未规范化。 我已尝试在我的入口点类中添加以下 bean 来解决该错误。 错误日志: 我希望我的jsp页面加载,而不是抛出“白标错误”。
我正在尝试将最近使用Angular2下载的一个文件上传到Spring API Rest。 问题是(在spring应用程序上显示)。。。 请求被拒绝,因为找不到多部分边界 在org。阿帕奇。公猫util。http。文件上传。FileUploadBase$FileItemIteratorImpl。(FileUploadBase.java:831)~[tomcat-embed-core-8.5.28.j
我试图覆盖Archaius为线程池提供的默认配置(如corepool大小、最大池大小、队列大小等)。但不知何故,它并没有起到作用。下面是我在application.yml文件中的配置。 Hystrix:命令:QueryTimeOutHandler:执行:隔离:线程:TimeOutInMilliseconds:600000线程池:QueryTimeOutHandler:CoreSize:200 Ma
我为Spring3Rest多部分文件上传做了一个POC。它工作正常。但是当我尝试与我的应用程序集成时,我遇到了问题。 它抛出以下异常: 如果我在代码的任何部分出错了,请告诉我。 豆: 控制器: