怎么使用Spring MVC攔截器實(shí)現(xiàn)一個(gè)登錄功能?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
化德網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
HandlerInterceptor接口
Spring MVC中的Interceptor攔截器攔截的請(qǐng)求是通過(guò)實(shí)現(xiàn)HandlerInterceptor接口來(lái)完成的。在Spring MVC中定義一個(gè)Interceptor攔截器非常簡(jiǎn)單,通過(guò)在要定義的Interceptor攔截器類(lèi)中實(shí)現(xiàn)Spring的HandlerInterceptor接口,或是繼承抽象類(lèi)HandlerInterceptorAdapter。
HandlerInterceptor接口定義了三個(gè)方法,Spring MVC就是通過(guò)這三個(gè)方法來(lái)對(duì)用戶(hù)的請(qǐng)求進(jìn)行攔截處理的,下面對(duì)這三個(gè)方法進(jìn)行具體的詳解:
(1)boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handle)。顧名思義,這個(gè)方法將在請(qǐng)求處理之前被調(diào)用。Spring MVC中的Interceptor實(shí)行的是鏈?zhǔn)秸{(diào)用,即在一個(gè)應(yīng)用中或者說(shuō)在一個(gè)請(qǐng)求中可以同時(shí)存在多個(gè)Interceptor。每個(gè)Interceptor的調(diào)用會(huì)依據(jù)它的聲明順序依次執(zhí)行,而且最先執(zhí)行的是Interceptor中的preHandle方法,所以可以在這個(gè)方法中進(jìn)行一些前置的初始化操作或者是對(duì)當(dāng)前請(qǐng)求的一個(gè)預(yù)處理,也可以在這個(gè)方法中進(jìn)行一些判斷來(lái)決定請(qǐng)求是否要繼續(xù)進(jìn)行下去。該方法的返回值是boolean類(lèi)型的,當(dāng)返回值為FALSE時(shí),表示請(qǐng)求結(jié)束,后續(xù)的Interceptor和Controller都不會(huì)再執(zhí)行;當(dāng)返回值為T(mén)RUE時(shí)就會(huì)繼續(xù)調(diào)用下一個(gè)Interceptor的preHandle方法;如果已經(jīng)是最后一個(gè)Interceptor,就會(huì)調(diào)用當(dāng)前請(qǐng)求的Controller方法。
(2)void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView mv)。該方法和之后的afterCompletion方法都只能在當(dāng)前所屬的Interceptor的preHandle方法的返回值為T(mén)RUE時(shí)才能被調(diào)用。postHandle方法,顧名思義,就是在當(dāng)前請(qǐng)求被處理之后,也就是Controller方法被調(diào)用之后執(zhí)行,但是它會(huì)在DispatcherServlet進(jìn)行視圖返回渲染之前被調(diào)用,所以我們可以在這個(gè)方法中對(duì)Controller處理之后的ModelAndView對(duì)象進(jìn)行操作。postHandle方法被調(diào)用的方向跟preHandle是相反的,也就是說(shuō)先聲明的Interceptor的postHandle方法反而會(huì)后執(zhí)行,這和Struts2里面的Interceptor的執(zhí)行過(guò)程類(lèi)似。
(3)void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception exception)。 該方法也是在當(dāng)前所屬的Interceptor的preHandle方法的返回值為T(mén)RUE時(shí)才會(huì)執(zhí)行。顧名思義,該方法將在這個(gè)請(qǐng)求結(jié)束之后,也就是在DispatcherServlet渲染了對(duì)應(yīng)的視圖之后執(zhí)行。這個(gè)方法的主要作用就是進(jìn)行資源整理。
攔截器實(shí)現(xiàn)用戶(hù)權(quán)限驗(yàn)證
本文將通過(guò)Spring MVC攔截器完成一個(gè)用戶(hù)權(quán)限驗(yàn)證的功能。即用戶(hù)必須登錄之后才可以訪問(wèn)這個(gè)web網(wǎng)站的首頁(yè),如果沒(méi)有登錄就直接訪問(wèn)網(wǎng)站首頁(yè),則攔截器會(huì)攔截請(qǐng)求,并將請(qǐng)求重新轉(zhuǎn)發(fā)到登錄頁(yè)面,同時(shí)提示用戶(hù)“需要先登錄再訪問(wèn)網(wǎng)站”,由于是演示案例,所以成功登錄之后的網(wǎng)站頁(yè)面我們直接是拼的一個(gè)網(wǎng)頁(yè)顯示給用戶(hù)。本項(xiàng)目作為測(cè)試案例,我就不創(chuàng)建Maven項(xiàng)目了,直接創(chuàng)建的是一個(gè)Dynamic Web Project(動(dòng)態(tài)的web項(xiàng)目),項(xiàng)目名稱(chēng)為:Interceptor,本項(xiàng)目采用Tomcat 8作為web服務(wù)器,我們需要在項(xiàng)目中引入以下jar包,jar包我就截圖演示了,附件源碼中l(wèi)ib文件夾下會(huì)有,這里直接給一個(gè)項(xiàng)目的目錄結(jié)構(gòu),如下圖:
首先呢,我們要做一個(gè)網(wǎng)頁(yè),這個(gè)網(wǎng)頁(yè)就是用來(lái)提示用戶(hù)的登錄信息,提示輸入用戶(hù)名和密碼,在此我們?cè)陧?xiàng)目的WebContent/WEB-INF/content文件夾中創(chuàng)建一個(gè)loginForm.jsp,這是一個(gè)jsp文件,具體代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登錄頁(yè)面</title> </head> <body> <h3>用于演示攔截器登錄頁(yè)面</h3> <form action="login" method="post"> <!-- 提示信息 --> <font color="red">${requestScope.message }</font> <table> <tr> <td><label>登錄名: </label></td> <td><input type="text" id="loginname" name="loginname" ></td> </tr> <tr> <td><label>密碼: </label></td> <td><input type="password" id="password" name="password" ></td> </tr> <tr> <td><input type="submit" value="登錄"></td> </tr> </table> </form> </body> </html>
這時(shí)我們需要進(jìn)行處理/login的請(qǐng)求,我們需要寫(xiě)請(qǐng)求的功能代碼,在src目錄下創(chuàng)建“cn.edu.jit.controller”包,在創(chuàng)建一個(gè)UserController類(lèi),用來(lái)處理用戶(hù)請(qǐng)求。具體代碼如下:
package cn.edu.jit.controller; import javax.servlet.http.HttpSession; import cn.edu.jit.domain.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * 處理用戶(hù)請(qǐng)求控制器 */ @Controller public class UserController { /** * 處理/login請(qǐng)求 */ @RequestMapping(value="/login") public ModelAndView login(String loginname,String password,ModelAndView mv,HttpSession session) { //模擬數(shù)據(jù)庫(kù)根據(jù)登錄名和密碼查找用戶(hù),判斷用戶(hù)登錄 if(loginname != null && loginname.equals("錢(qián)春華") && password != null && password.equals("123456")) { //模擬創(chuàng)建用戶(hù) User user = new User(); user.setLoginname(loginname); user.setPassword(password); user.setUsername("錢(qián)春華"); //登錄成功,將user對(duì)象設(shè)置到HttpSession作用范圍域 session.setAttribute("user", user); //轉(zhuǎn)發(fā)到main請(qǐng)求 mv.setViewName("redirect:main"); } else { //登錄失敗,設(shè)置失敗提示信息,并跳轉(zhuǎn)到登錄頁(yè)面 mv.addObject("message", "登錄名或密碼錯(cuò)誤,請(qǐng)重新輸入!"); mv.setViewName("loginForm"); } return mv; } }
UserControlle類(lèi)的login方法用來(lái)處理登錄的請(qǐng)求,本項(xiàng)目沒(méi)有使用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),只是簡(jiǎn)單的模擬了用戶(hù)的登錄,只要用戶(hù)輸入登錄名是“錢(qián)春華”,密碼是“123456”,則驗(yàn)證通過(guò),并創(chuàng)建一個(gè)User對(duì)象保存到HttpSession當(dāng)中,同時(shí)將請(qǐng)求使用客戶(hù)端跳轉(zhuǎn)到main請(qǐng)求:如果登錄失敗提示信息到ModelAndView對(duì)象,同時(shí)將請(qǐng)求使用客戶(hù)端跳轉(zhuǎn)到loginFrom請(qǐng)求,即登錄頁(yè)面。
同樣地,我們剛剛寫(xiě)了一個(gè)用戶(hù)的登錄請(qǐng)求,我們接下來(lái)要處理/main請(qǐng)求,用于實(shí)現(xiàn)登錄之后給用戶(hù)顯示書(shū)的詳細(xì)定價(jià)以及出版信息,我們還在“cn.edu.jit.controller”包中創(chuàng)建一個(gè)名為BookController類(lèi),用于處理圖書(shū)請(qǐng)求。具體代碼如下:
package cn.edu.jit.controller; import java.util.ArrayList; import java.util.List; import cn.edu.jit.domain.Book; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; /** * 處理圖書(shū)請(qǐng)求控制器 * @author 錢(qián)春華 */ @Controller public class BookController { /** * 處理/main請(qǐng)求 */ @RequestMapping(value="/main") public String main(Model model) { //模擬數(shù)據(jù)庫(kù)獲得所有圖書(shū)集合 List<Book> book_list = new ArrayList<Book>(); book_list.add(new Book("java.jpg","JAVA核心技術(shù)1","周立新 編著",90.00)); book_list.add(new Book("ee.jpg","Android第一行代碼","郭霖 編著",72.50)); book_list.add(new Book("android.jpg","Spring+MyBatis企業(yè)應(yīng)用實(shí)戰(zhàn)","李剛 編著",58.00)); book_list.add(new Book("ajax.jpg","SpringMVC實(shí)戰(zhàn)","Alex Bretet 編著",99.00)); //將圖書(shū)集合添加到model當(dāng)中 model.addAttribute("book_list", book_list); //跳轉(zhuǎn)到main頁(yè)面 return "main"; } }
BookController類(lèi)中的main方法用來(lái)處理網(wǎng)站首頁(yè)的請(qǐng)求,該方法獲得所有圖書(shū)的信息,并將它們?cè)O(shè)置到Model當(dāng)中,然后傳遞到main頁(yè)面。由于本案例沒(méi)有使用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),只是簡(jiǎn)單的創(chuàng)建了一個(gè)集合模擬從數(shù)據(jù)庫(kù)獲取圖書(shū)信息。
下面是登錄成功后訪問(wèn)網(wǎng)頁(yè)的main.jsp代碼,該jsp代碼位于WebContent/WEB-INF/content文件夾中。如下具體代碼所示:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首頁(yè)</title> <style type="text/css"> table{border-collapse:collapse;border-spacing:0;border-left:1px solid #888;border-top:1px solid #888;background:#efefef;} th,td{border-right:1px solid #888;border-bottom:1px solid #888;padding:5px 15px;} th{font-weight:bold;background:#ccc;} </style> </head> <body> <h3 align="center">歡迎[${sessionScope.user.username }]訪問(wèn)</h3> <br> <table border="1" align="center"> <tr> <th>封面</th><th>圖書(shū)名稱(chēng)</th><th>作者</th><th>出版價(jià)格</th> </tr> <c:forEach items="${requestScope.book_list }" var="book"> <tr> <td><img src="images/${book.image }" height="60"></td> <td>${book.name }</td> <td>${book.author }</td> <td>${book.price }</td> </tr> </c:forEach> </table> </body> </html>
接下來(lái),我將設(shè)計(jì)攔截器驗(yàn)證用戶(hù)是否登錄,如果用戶(hù)沒(méi)有登錄,不可以訪問(wèn)除登錄頁(yè)面和登錄請(qǐng)求的所有Controller。我們?cè)趕rc文件下創(chuàng)建名為“cn.edu.jit.interceptor”這個(gè)包,在這個(gè)包下創(chuàng)建“AuthorizationInterceptor”類(lèi),用于演示攔截器驗(yàn)證用戶(hù)是否登錄。具體代碼如下:
package cn.edu.jit.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.edu.jit.domain.User; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * 攔截器必須實(shí)現(xiàn)HandlerInterceptor接口 */ public class AuthorizationInterceptor implements HandlerInterceptor { //不攔截"/loginForm"和"/login"請(qǐng)求 private static final String[] IGNORE_URI = {"/loginForm", "/login"}; /** * 該方法將在整個(gè)請(qǐng)求完成之后執(zhí)行, 主要作用是用于清理資源的, * 該方法也只能在當(dāng)前Interceptor的preHandle方法的返回值為true時(shí)才會(huì)執(zhí)行。 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception { System.out.println("AuthorizationInterceptor afterCompletion --> "); } /** * 該方法將在Controller的方法調(diào)用之后執(zhí)行, 方法中可以對(duì)ModelAndView進(jìn)行操作 , * 該方法也只能在當(dāng)前Interceptor的preHandle方法的返回值為true時(shí)才會(huì)執(zhí)行。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception { System.out.println("AuthorizationInterceptor postHandle --> "); } /** * preHandle方法是進(jìn)行處理器攔截用的,該方法將在Controller處理之前進(jìn)行調(diào)用, * 該方法的返回值為true攔截器才會(huì)繼續(xù)往下執(zhí)行,該方法的返回值為false的時(shí)候整個(gè)請(qǐng)求就結(jié)束了。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("AuthorizationInterceptor preHandle --> "); //flag變量用于判斷用戶(hù)是否登錄,默認(rèn)為false boolean flag = false; //獲取請(qǐng)求的路徑進(jìn)行判斷 String servletPath = request.getServletPath(); //判斷請(qǐng)求是否需要攔截 for (String s : IGNORE_URI) { if (servletPath.contains(s)) { flag = true; break; } } //攔截請(qǐng)求 if (!flag) { //1.獲取session中的用戶(hù) User user = (User) request.getSession().getAttribute("user"); //2.判斷用戶(hù)是否已經(jīng)登錄 if(user == null) { //如果用戶(hù)沒(méi)有登錄,則設(shè)置提示信息,跳轉(zhuǎn)到登錄頁(yè)面 System.out.println("AuthorizationInterceptor攔截請(qǐng)求:"); request.setAttribute("message", "請(qǐng)先登錄再訪問(wèn)網(wǎng)站"); request.getRequestDispatcher("loginForm").forward(request, response); } else { //如果用戶(hù)已經(jīng)登錄,則驗(yàn)證通過(guò),放行 System.out.println("AuthorizationInterceptor放行請(qǐng)求:"); flag = true; } } return flag; } }
我們需要在springmvc-config.xml文件中配置攔截器,配置代碼具體如下:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*"/> <!-- 使用bean定義一個(gè)Interceptor,直接定義在mvc:interceptors根下面的Interceptor將攔截所有的請(qǐng)求 --> <bean class="cn.edu.jit.interceptor.AuthorizationInterceptor"/> </mvc:interceptor> </mvc:interceptors>
我們?cè)趙eb.xml中配置代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>MultipartFileTest</display-name> <!-- 定義Spring MVC的前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 讓Spring MVC的前端控制器攔截所有請(qǐng)求 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 編碼過(guò)濾器 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
我們來(lái)部署Interceptor這個(gè)Web應(yīng)用,在瀏覽器中輸入如下URL來(lái)測(cè)試應(yīng)用:
http://localhost:8088/Interceptor
按Enter(回車(chē)),出現(xiàn)以下頁(yè)面,如果沒(méi)有登錄,直接訪問(wèn)main請(qǐng)求,攔截器會(huì)攔截請(qǐng)求,驗(yàn)證用戶(hù)是否登錄,此時(shí)用戶(hù)若沒(méi)有登錄,則跳轉(zhuǎn)到登錄頁(yè)面。如下圖:
此時(shí)我若輸入用戶(hù)名:“錢(qián)春華”,密碼(假設(shè)輸入錯(cuò)誤的密碼)為:“123123”,則攔截器會(huì)攔截請(qǐng)求,并將請(qǐng)求重新轉(zhuǎn)發(fā)到登錄頁(yè)面,同時(shí)提示用戶(hù)“需要先登錄再訪問(wèn)網(wǎng)站”。如下圖所示:
輸入正確的用戶(hù)名“錢(qián)春華”,密碼為“123456”后,顯示用戶(hù)登錄成功,而后跳轉(zhuǎn)到網(wǎng)頁(yè)的首頁(yè)。如下圖所示:
本文中的一些功能案例代碼和配置文件不是很完整,下面附上完整代碼:
FormController類(lèi)完整的代碼如下:
package cn.edu.jit.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; /** * 動(dòng)態(tài)頁(yè)面跳轉(zhuǎn)控制器 */ @Controller public class FormController { @RequestMapping(value="/{formName}") public String loginForm(@PathVariable String formName){ //動(dòng)態(tài)跳轉(zhuǎn)頁(yè)面 return formName; } }
在src文件下創(chuàng)建“cn.edu.jit.domain”包,用于存放圖書(shū)和用戶(hù)的兩個(gè)實(shí)例,具體代碼如下:
Book類(lèi)代碼:
package cn.edu.jit.domain; import java.io.Serializable; /** * * @author 錢(qián)春華 * */ public class Book implements Serializable{ private Integer id;//id private String name;//書(shū)名 private String author;//作者 private Double price;//價(jià)格 private String image;//封面圖片 public Book() { super(); } public Book( String image,String name, String author, Double price) { super(); this.image = image; this.name = name; this.author = author; this.price = price; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } @Override public String toString() { return "Book [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + ", image=" + image + "]"; } }
User類(lèi)代碼:
package cn.edu.jit.domain; import java.io.Serializable; public class User implements Serializable { private Integer id;//id private String loginname;//登錄名 private String password;//密碼 private String username;//用戶(hù)名 public User() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String toString() { return "User [id=" + id + ", loginname=" + loginname + ", password=" + password + ", username=" + username + "]"; } }
springmvc-config.xml配置文件具體配置信息如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- spring可以自動(dòng)去掃描base-pack下面的包或者子包下面的java文件, 如果掃描到有Spring的相關(guān)注解的類(lèi),則把這些類(lèi)注冊(cè)為Spring的bean --> <context:component-scan base-package="cn.edu.jit.controller"/> <!-- 設(shè)置默認(rèn)配置方案 --> <mvc:annotation-driven/> <!-- 使用默認(rèn)的Servlet來(lái)響應(yīng)靜態(tài)文件 --> <mvc:default-servlet-handler/> <!-- 視圖解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前綴 --> <property name="prefix"> <value>/WEB-INF/content/</value> </property> <!-- 后綴 --> <property name="suffix"> <value>.jsp</value> </property> </bean> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*"/> <!-- 使用bean定義一個(gè)Interceptor,直接定義在mvc:interceptors根下面的Interceptor將攔截所有的請(qǐng)求 --> <bean class="cn.edu.jit.interceptor.AuthorizationInterceptor"/> </mvc:interceptor> </mvc:interceptors> </beans>
web.xml配置文件具體配置信息如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>MultipartFileTest</display-name> <!-- 定義Spring MVC的前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 讓Spring MVC的前端控制器攔截所有請(qǐng)求 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 編碼過(guò)濾器 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
看完上述內(nèi)容,你們掌握怎么使用Spring MVC攔截器實(shí)現(xiàn)一個(gè)登錄功能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享文章:怎么使用SpringMVC攔截器實(shí)現(xiàn)一個(gè)登錄功能
網(wǎng)頁(yè)網(wǎng)址:http://aaarwkj.com/article0/igjjoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站、軟件開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、定制網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
全網(wǎng)營(yíng)銷(xiāo)推廣知識(shí)