Springmvc restful配置遇到的小坑
首先web.xml配置
<!-- 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 配置/即可,如果配置/*的話會(huì)出問(wèn)提,連返回視圖jsp也會(huì)攔截,具體原因請(qǐng)看翻看源碼
問(wèn)提:這樣配置的話,大家都會(huì)忽略一個(gè)問(wèn)題,就是a/b/c可以訪問(wèn),但是a/b/c.do;a/b/c.mm;a/b/c.zz都可以訪問(wèn)a/b/c的controller,在不修改源碼源碼的情況下,我們來(lái)
解決這個(gè)問(wèn)題,雖然都是攔截了/這樣的請(qǐng)求,但是我們只讓a/b/c這樣的請(qǐng)求進(jìn)入controller,帶有【.】的后綴的不讓他進(jìn)入,直接去404頁(yè)面
解決辦法:
web.xml加入filte
<!-- 對(duì)url進(jìn)行簡(jiǎn)單的過(guò)濾 -->
<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;
/**
*
* 對(duì)進(jìn)來(lái)的url進(jìn)行處理,放在filter最前面,springmvc <url-pattern>/</url-pattern>
* 默認(rèn)攔截所有請(qǐng)求,ex:a/b/c.do,a/b/c.html,a/b/c.action,a/b/c
* 去掉帶后綴的訪問(wèn),模仿restful風(fēng)格,只接受a/b/c的請(qǐng)求
*
*/
public class ServletRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String requestPath = request.getServletPath();
//不用擔(dān)心會(huì)把靜態(tài)文件給攔截了,例如*.js,*.css類似于這樣的,在web.xml做處理了
//所有請(qǐng)求帶有后綴【.】的直接去404,不接受這樣的請(qǐng)求
if(requestPath.lastIndexOf(".")!=-1){
request.getRequestDispatcher("/WEB-INF/pages/error/404.jsp").forward(request, response);
}else{
filterChain.doFilter(request, response);
}
}
}
帶有.結(jié)尾的直接go 404,哈哈,也許你會(huì)問(wèn)要是這樣靜態(tài)文件不是也會(huì)被過(guò)濾掉了嗎?類似于*.js,*.css,.....N多這樣類型的文件
- SPRINGMVC JSON數(shù)據(jù)交互如何實(shí)現(xiàn)
- SpringMVC教程之json交互使用詳解
- 詳解springmvc之json數(shù)據(jù)交互controller方法返回值為簡(jiǎn)單類型
- 詳解springMVC之與json數(shù)據(jù)交互方法
- springmvc實(shí)現(xiàn)json交互-requestBody和responseBody
- Spring mvc實(shí)現(xiàn)Restful返回json格式數(shù)據(jù)實(shí)例詳解
- Spring mvc實(shí)現(xiàn)Restful返回xml格式數(shù)據(jù)實(shí)例詳解
- SpringMVC restful 注解之@RequestBody進(jìn)行json與object轉(zhuǎn)換
- SpringMVC JSON數(shù)據(jù)交互及RESTful支持實(shí)現(xiàn)方法
相關(guān)文章
Spring Boot 2.X快速整合jpa過(guò)程解析
這篇文章主要介紹了Spring Boot 2.X 如何快速整合jpa?,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
非maven項(xiàng)目快速轉(zhuǎn)換為maven項(xiàng)目的方法步驟
Spring注解驅(qū)動(dòng)之BeanPostProcessor后置處理器講解
Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗(yàn)詳解

