相关疑难解决方法(0)

如何在Spring MVC中处理静态内容?

我正在使用Spring MVC 3开发一个webapp,并且DispatcherServlet像'so'一样捕获所有请求(web.xml):

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

现在这可以像宣传的那样工作,但是我如何处理静态内容呢?以前,在使用RESTful URL之前,我会抓住所有*.html并将其发送给DispatcherServlet,但现在它是一个不同的球类游戏.

我有一个/ static /文件夹,其中包含/ styles /,/ js /,/ images/etc,我想从中排除/ static/*DispatcherServlet.

现在,当我这样做时,我可以获得静态资源:

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app/</url-pattern>
  </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

但我希望它有很好的URL(我使用Spring MVC 3)而不是登陆页面www.domain.com/app/

我也不希望解决方案耦合到tomcat或任何其他servlet容器,并且因为这是(相对)低流量我不需要网络服务器(如apache httpd)infront.

有一个干净的解决方案吗?

spring-mvc

197
推荐指数
9
解决办法
21万
查看次数

使用java配置在Spring中进行404错误重定向

如您所知,在XML中,配置它的方法是:

<error-page>
    <error-code>404</error-code>
    <location>/my-custom-page-not-found.html</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

但我还没有找到一种方法在Java配置中执行此操作.我尝试的第一种方式是:

@RequestMapping(value = "/**")
public String Error(){
    return "error";
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但它检索资源有冲突.

有办法吗?

java spring spring-mvc

21
推荐指数
5
解决办法
4万
查看次数

如何在Spring中拦截RequestRejectedException?

我看到一吨RequestRejectedException条目在我的Tomcat日志(样品粘贴下面).几个月前,经过次要版本升级(Spring Security 4.2.4,IIRC)之后,这些内容开始出现在我的日志文件中,所以这显然是Spring中默认启用的新安全功能.这里报告了类似的问题,但我的问题具体涉及如何在控制器中拦截这些异常.针对此问题记录了一个Spring Security错误(提供一种处理RequestRejectedException的方法).但是,在Spring 5.1之前,它们并未针对此问题进行修复.

我理解为什么抛出这些异常,我不想禁用此安全功能.

我想获得对此功能的一些控制,以便:

  1. 我知道我不会阻止合法用户访问我的网站.
  2. 我可以看到哪些请求会触发这个(它们是SQL注入攻击吗?)
  3. 我可以调整服务器响应.Spring Security防火墙将完整的堆栈跟踪转储到Web客户端(信息泄露)以及500 Internal Server Error(这是非常不正确的,这应该是a 400 Bad Request).

我想找到一种方法来记录所请求的URL,但也要专门针对这些异常禁止堆栈跟踪,因为它们会在不给我任何有用信息的情况下污染我的日志文件.最理想的情况是,我想拦截这些异常并在我的应用程序层中处理它们,而不是在Tomcat日志中报告它们.

例如,这是我每天出现的数千个日志条目之一catalina.out:

Aug 10, 2018 2:01:36 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception
org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String ";"
        at org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlacklistedUrls(StrictHttpFirewall.java:265)
        at org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:245)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:193)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
        at …
Run Code Online (Sandbox Code Playgroud)

java logging spring exception-handling spring-security

21
推荐指数
4
解决办法
6184
查看次数