javascript
(SpringMVC)拦截器
文章目錄
- 1.攔截器
- 1.1 概述
- 1.2 自定義攔截器
- 2. 驗證用戶是否登錄 (認證用戶)
- 2.1 實現思路
- 2.2 實現
1.攔截器
1.1 概述
SpringMVC的處理器攔截器類似于Servlet開發中的過濾器Filter,用于對處理器進行預處理和后處理。開發者可以自己定義一些攔截器來實現特定的功能。
過濾器與攔截器的區別:攔截器是AOP思想的具體應用。
過濾器
-
servlet規范中的一部分,任何java web工程都可以使用
-
在url-pattern中配置了/*之后,可以對所有要訪問的資源進行攔截
攔截器
-
攔截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
-
攔截器只會攔截訪問的控制器方法, 如果訪問的是jsp/html/css/image/js是不會進行攔截的
1.2 自定義攔截器
想要自定義攔截器,必須實現 HandlerInterceptor 接口。
1、新建一個Moudule , springmvc-07-Interceptor , 添加web支持
2、配置web.xml 和 springmvc-servlet.xml 文件
3、編寫一個攔截器
package com.zh.config;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {//在請求處理方法前執行//return false;不執行下一個攔截器//return true;執行下一個攔截器public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("---------------處理前------------------");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("---------------處理后------------------");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("---------------清理------------------");} }4、在springmvc的配置文件中配置攔截器
<!--配置攔截器--><mvc:interceptors><mvc:interceptor><!--/** 包括路徑及其子路徑--><!--/admin/* 攔截的是/admin/add等等這種 , /admin/add/user不會被攔截--><!--/admin/** 攔截的是/admin/下的所有--><mvc:mapping path="/**"/><!--bean配置的就是攔截器--><bean class="com.zh.config.MyInterceptor"/></mvc:interceptor></mvc:interceptors>5、編寫一個Controller,接收請求
@RestController public class HelloController {@GetMapping("hello")public String test(){System.out.println("控制器中的方法執行了");return "hello";} }6.測試
2. 驗證用戶是否登錄 (認證用戶)
2.1 實現思路
1、有一個登陸頁面,需要寫一個controller訪問頁面。
2、登陸頁面有一提交表單的動作。需要在controller中處理。判斷用戶名密碼是否正確。如果正確,向session中寫入用戶信息。返回登陸成功。
3、攔截用戶請求,判斷用戶是否登陸。如果用戶已經登陸。放行, 如果用戶未登陸,跳轉到登陸頁面
2.2 實現
1、編寫一個登陸頁面 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>登錄頁面</title> </head> <body> <form action="${pageContext.request.contextPath}/user/login" >用戶名 <input type="text" name="username"> <br>密碼 <input type="password" name="password"> <br><input type="submit" value="提交"></form></body> </html>2、編寫一個Controller處理請求
package com.zh.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;@Controller @RequestMapping("/user") public class UserController {//跳轉到登錄頁面@RequestMapping("/jumpLogin")public String jumpLogin(){return "login";}//跳轉到成功頁面@RequestMapping("/jumpSuccess")public String jumpSuccess(){return "success";}@RequestMapping("/login")public String login(HttpSession session,String username,String password){//向session記錄用戶登錄信息session.setAttribute("user",username);return "success";}@RequestMapping("/logout")public String logout(HttpSession session){session.removeAttribute("user");return "login";} }3、編寫一個登陸成功的頁面 success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>登錄成功頁面</title> </head> <body> ${user} <a href="${pageContext.request.contextPath}/user/logout">注銷</a> </body> </html>4、在 index 頁面上測試跳轉!啟動Tomcat 測試,未登錄也可以進入主頁!
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html><head><title>$Title$</title></head><body><h1>首頁</h1><hr> <%--登錄--%><a href="${pageContext.request.contextPath}/user/jumplogin">登錄</a><a href="${pageContext.request.contextPath}/user/jumpSuccess">成功頁面</a></body> </html>5、編寫用戶登錄攔截器
package com.zh.config;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;public class LoginInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 如果是登陸頁面則放行if (request.getRequestURI().contains("login")){return true;}HttpSession session = request.getSession();// 如果用戶已登陸也放行if (session.getAttribute("user")!=null){return true;}// 用戶沒有登陸跳轉到登陸頁面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);return false;} }6、在Springmvc的配置文件中注冊攔截器
<mvc:interceptor><mvc:mapping path="/**"/><bean id="loginInterceptor" class="com.zh.config.LoginInterceptor"/></mvc:interceptor>7、再次重啟Tomcat測試!
總結
以上是生活随笔為你收集整理的(SpringMVC)拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot初步入门
- 下一篇: SpringCloud(第二部分)