当前位置: 首页 > 知识库问答 >
问题:

Spring“请求被拒绝,因为URL未被规范化。”如何判断使用了什么URL?

李宜然
2023-03-14

我在生产中遇到大量错误

org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.

据推测,这是由我的url中的//引起的,但我不知道它们是从哪里来的。我如何知道是什么url导致了这种情况?当你不知道发生了什么时,很难修复。

我确实意识到有一个相关的问题,但这并没有解决如何诊断有问题的URL。它只解决了如何关闭严格的防火墙。

共有3个答案

包兴思
2023-03-14

我的问题是,我有一个使用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

臧增
2023-03-14

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;
} 
龙才俊
2023-03-14

很抱歉没有把这个作为评论发表,但是我还不能这么做。

您是否尝试过另一个日志级别并记录到文件中?我现在不在家,但如果不在家,请试试下面这几行:

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。它工作正常。但是当我尝试与我的应用程序集成时,我遇到了问题。 它抛出以下异常: 如果我在代码的任何部分出错了,请告诉我。 豆: 控制器: