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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring MVC使用拦截器实现权限控制

發(fā)布時間:2025/7/14 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring MVC使用拦截器实现权限控制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、首先準(zhǔn)備對應(yīng)的架包


2、看看項(xiàng)目的架構(gòu)

3、基本的web.xml文件

<!--?xml version="1.0" encoding="UTF-8"?--> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>shiro</display-name><!-- 加載springmvc --><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- 以.htm結(jié)尾的都被mvc攔截 --><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>*.htm</url-pattern></servlet-mapping><!-- 啟動spring 加載 需要加載其他的spring時 需啟動該監(jiān)聽器<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>--> </web-app>

4、配置classpath下的mvc.xml文件

<!--?xml version="1.0" encoding="UTF-8"?--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><mvc:annotation-driven><!-- 自動掃描包 --><context:component-scan base-package="com.cat.spring.controller"><!-- 配置mvc的攔截器 可以配置多個 --><mvc:interceptors><mvc:interceptor><!-- 需要被攔截的路徑 --><mvc:mapping path="/member/**"><!-- 攔截處理的interceptor --><bean class="com.cat.interceptor.MemberInterceptor"></bean></mvc:mapping></mvc:interceptor></mvc:interceptors><!-- mvc返回頁面的配置 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver"><!-- 模板路徑為WEB-INF/pages/ --><property name="prefix"><value>/WEB-INF/pages/</value></property><!-- 視圖模板后綴為.JSP --><property name="suffix"><value>.jsp</value></property></bean></context:component-scan></mvc:annotation-driven></beans>

5、接著就要配置攔截器了MemberInterceptor.java

/*** */ package com.cat.interceptor;import java.net.URLEncoder;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import org.apache.commons.lang.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;/*** @author chenlf* * 2014-3-25*/ public class MemberInterceptor implements HandlerInterceptor {public final static String SEESION_MEMBER = "seesion_member";/** (non-Javadoc)* * @see org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.servlet.http.HttpServletRequest,* javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception)*/public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,Exception arg3) throws Exception {// TODO Auto-generated method stub}/** (non-Javadoc)* * @see org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.http.HttpServletRequest,* javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.web.servlet.ModelAndView)*/public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,ModelAndView arg3) throws Exception {// TODO Auto-generated method stub}/** (non-Javadoc)* 攔截mvc.xml配置的/member/**路徑的請求* @see org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.http.HttpServletRequest,* javax.servlet.http.HttpServletResponse, java.lang.Object)*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {//請求的路徑String contextPath=request.getContextPath();String url=request.getServletPath().toString();HttpSession session = request.getSession();String user = (String) session.getAttribute(SEESION_MEMBER);//這里可以根據(jù)session的用戶來判斷角色的權(quán)限,根據(jù)權(quán)限來重定向不同的頁面,簡單起見,這里只是做了一個重定向if (StringUtils.isEmpty(user)) {//被攔截,重定向到login界面response.sendRedirect(contextPath+"/login.htm?redirectURL="+ URLEncoder.encode(url));return false;}return true;}}
這樣攔截器的核心就配置完了,接下來就是一些登陸的處理操作

6、LoginController.java文件

package com.cat.spring.controller;import java.net.URLDecoder;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView;import com.cat.interceptor.MemberInterceptor;/*** @author chenlf* * 2014-3-24*/ @Controller public class LoginController {@RequestMapping(value = "/login", method = RequestMethod.GET)public ModelAndView login(String redirectURL, HttpServletRequest request) {ModelAndView view = new ModelAndView();//把攔截前路徑存下來,以便登入成功可以直接請求到登錄前的頁面view.addObject("redirectURL", redirectURL);view.setViewName("/login");return view;}@RequestMapping(value = "/submit", method = RequestMethod.POST)public String submit(String username, String password, String redirectURL,HttpServletRequest request) {//模擬登陸成功 用戶admin 密碼admin的用戶if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)&& username.equals("admin") && password.equals("admin")) {//當(dāng)?shù)顷懗晒κ?#xff0c;將用戶信息存放到session中去HttpSession session = request.getSession();session.setAttribute(MemberInterceptor.SEESION_MEMBER, "admin");if (StringUtils.isNotBlank(redirectURL)) {return "redirect:" + URLDecoder.decode(redirectURL);}return "redirect:/member/index.htm";} else {if (StringUtils.isNotBlank(redirectURL)) {return "redirect:/login.htm?" + URLDecoder.decode(redirectURL);}return "redirect:/login.htm";}}

7、下面就是login.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8" ????pageEncoding="utf-8"%>

8、到這里看看效果吧

a、當(dāng)非登陸狀態(tài)的時候,請求localhost:8010/demo-mvc/member/list.htm時,被攔截?cái)r截,重定向到login頁面,并攜帶了當(dāng)前的這個路徑(/member/list.htm)作為參數(shù)傳到頁面

b、輸入正確的用戶名admin 密碼admin后登陸,會跳轉(zhuǎn)到攔截前的頁面

c、當(dāng)?shù)顷懲瓿珊?#xff0c;輸入地址為http://localhost:8010/demo-mvc/member/index.htm,session中記錄著當(dāng)前用戶的信息,不需要重新登陸了


總結(jié)

以上是生活随笔為你收集整理的Spring MVC使用拦截器实现权限控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。