首先web.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!-- spring-mvc --> <servlet> <servlet-name>springServlet</servlet-name> <servlet- class >org.springframework.web.servlet.DispatcherServlet</servlet- class > <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> |
url-pattern 配置/即可,如果配置/*的話會出問提,連返回視圖jsp也會攔截,具體原因請看翻看源碼
問提:這樣配置的話,大家都會忽略一個問題,就是a/b/c可以訪問,但是a/b/c.do;a/b/c.mm;a/b/c.zz都可以訪問a/b/c的controller,在不修改源碼源碼的情況下,我們來
解決這個問題,雖然都是攔截了/這樣的請求,但是我們只讓a/b/c這樣的請求進入controller,帶有【.】的后綴的不讓他進入,直接去404頁面
解決辦法:
web.xml加入filte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<!-- 對url進行簡單的過濾 --> <filter> <filter-name>servletRequest</filter-name> <filter- class >cn.tomcat.quickstart.common.filter.ServletRequestFilter</filter- class > </filter> <filter-mapping> <filter-name>servletRequest</filter-name> <url-pattern> /*</url-pattern> </filter-mapping> ServletRequestFilter.java import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.filter.OncePerRequestFilter; /** * * 對進來的url進行處理,放在filter最前面,springmvc <url-pattern>/</url-pattern> * 默認攔截所有請求,ex:a/b/c.do,a/b/c.html,a/b/c.action,a/b/c * 去掉帶后綴的訪問,模仿restful風格,只接受a/b/c的請求 * */ public class ServletRequestFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String requestPath = request.getServletPath(); //不用擔心會把靜態(tài)文件給攔截了,例如*.js,*.css類似于這樣的,在web.xml做處理了 //所有請求帶有后綴【.】的直接去404,不接受這樣的請求 if (requestPath.lastIndexOf( "." )!=- 1 ){ request.getRequestDispatcher( "/WEB-INF/pages/error/404.jsp" ).forward(request, response); } else { filterChain.doFilter(request, response); } } } |
帶有.結尾的直接go 404,哈哈,也許你會問要是這樣靜態(tài)文件不是也會被過濾掉了嗎?類似于*.js,*.css,.....N多這樣類型的文件
原文鏈接:http://www.cnblogs.com/ijuzi/p/5669588.html