日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

拦截器,利用拦截器进行登陆权限控制

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拦截器,利用拦截器进行登陆权限控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

攔截器,登錄權限控制demo

    • 1. 攔截器demo
    • 2. 登錄權限控制

地址:
https://github.com/sevenyoungairye/spring-mvc-interceptor

1. 攔截器demo

  • 什么是攔截器
攔截器基于是aop思想實現的。 針對controller里面的目標方法進行攔截。 對比過濾器是過濾所有請求,及靜態資源。
  • 創建攔截器 實現HanlderInceptro接口

攔截器1

package cn.bitqian.interceptor;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** spring mvc 攔截器入門* @author echo lovely* @date 2020/9/6 17:30*/ public class MyInterceptor1 implements HandlerInterceptor {// 在目標方法執行之前執行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {System.out.println("preHandler..");String param = request.getParameter("param");if ("yes".equals(param)) {return true;}// 參數錯誤跳轉到錯誤的頁面request.getRequestDispatcher("/error.jsp").forward(request, response);// 放行return false;}// 在目標方法執行之后,視圖返回之前執行@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {// 可以在視圖對象返回之前 修改modelif (modelAndView != null) // 如果訪問的目標資源沒有 ModelAndView返回,會null pointermodelAndView.addObject("name", "bitQian adorable");System.out.println("post handler");}// 在所有流程執行完后 執行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("after completion");} }

攔截器2

package cn.bitqian.interceptor;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 攔截器2 與攔截器1構成鏈* @author echo lovely* @date 2020/9/6 21:40*/ public class MyInterceptor2 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("pre handle22222...");return true; // 經過攔截器2 放行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("post handle222222222...");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("completion222222...");} }
  • 配置攔截器
<!-- 攔截器 對controller中的目標方法進行攔截 --><mvc:interceptors><mvc:interceptor><!--對所有目標資源(那些資源)進行攔截--><!--<mvc:mapping path="/**"/>--><!--<mvc:mapping path="/*"/>--><mvc:mapping path="/target1"/><bean id="interceptor1" class="cn.bitqian.interceptor.MyInterceptor1"></bean></mvc:interceptor><!-- 攔截器1與攔截器2構成攔截器鏈 攔截器配置先后 決定攔截器執行的順序 --><mvc:interceptor><mvc:mapping path="/target1"/><bean id="interceptor2" class="cn.bitqian.interceptor.MyInterceptor2"></bean></mvc:interceptor></mvc:interceptors>
  • 目標方法(controller)
package cn.bitqian.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;/*** 測試攔截器* @author echo lovely* @date 2020/9/6 17:42*/ @Controller public class TargetController {@RequestMapping("/target1")public ModelAndView target1() {ModelAndView modelAndView = new ModelAndView();// 設置模型modelAndView.addObject("name", "bitqian");// 返回視圖對象modelAndView.setViewName("demo1");System.out.println("target1 目標資源訪問..");return modelAndView;} }
  • 測試攔截器的攔截效果
    未帶參數跳轉到對應的頁面

    當我帶參數

2. 登錄權限控制

  • 頁面
<%--Created by IntelliJ IDEA.User: echo lovelyDate: 2020/9/7Time: 19:21用戶登錄頁面 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>login page</title> </head> <body><form action="user/login" method="post">用戶名:<input type="text" name="userName"/> <br/>密碼:<input type="password" name="password"/> <br/><input type="submit" value="login"/></form></body> </html>
  • user controller
package cn.bitqian.controller;import cn.bitqian.entity.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;/*** @author echo lovely* @date 2020/9/7 19:15*/ @Controller @RequestMapping(value = "/user") public class UserController {@RequestMapping(value = "/login")public String login(String userName, String password, HttpSession session) {if ("bitqian".equals(userName) && "bitqian666".equals(password)) {User user = new User(userName, password);// 賬號密碼正確設置 將用戶對象保存到session中session.setAttribute("user", user);return "redirect:/index.jsp";}System.out.println(userName + "\t" + password);return "redirect:/login.jsp";} }
  • 權限控制攔截器
package cn.bitqian.interceptor;import cn.bitqian.entity.User; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** @author echo lovely* @date 2020/9/7 19:42*/ public class AuthorityInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {User user = (User) request.getSession().getAttribute("user");if (user == null) {// 未登錄跳轉到登錄頁面response.sendRedirect("login.jsp");return false;}System.out.println("user permission..");return true;} }
  • 對目標方法進行攔截,除login
<mvc:interceptors><!-- 用戶是否登錄 作用的攔截器 --><mvc:interceptor><mvc:mapping path="/**"/><!-- 不攔截 login方法--><mvc:exclude-mapping path="/user/login"/><mvc:exclude-mapping path="/target1"/><bean class="cn.bitqian.interceptor.AuthorityInterceptor"></bean></mvc:interceptor> </mvc:interceptors>

總結

以上是生活随笔為你收集整理的拦截器,利用拦截器进行登陆权限控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。