文档章节

springmvc 拦截器

 阿宇_
发布于 2015/07/16 11:59
字数 727
阅读 138
收藏 2

项目目录结构:


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
	<display-name></display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>web</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:/SpringMVC123.xml</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>web</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

SpringMVC123.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:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
	    http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">

	<!-- 打开注解驱动开关 -->
	<context:annotation-config />

	<context:component-scan base-package="com.zhxjz.controller" />

	<!-- 配置文件 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<array>
				<value>classpath:/configs.properties</value>
			</array>
		</property>
	</bean>

	<!-- jsp渲染 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<!-- mvc拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<bean class="com.zhxjz.common.PermissionInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

	<!-- mvc 注解 -->
	<mvc:annotation-driven />

	<!-- 静态资源 -->
	<mvc:resources mapping="/js/**" location="/js/" />
	<mvc:resources mapping="/css/**" location="/css/" />
	<mvc:resources mapping="/font/**" location="/font/" />
	<mvc:resources mapping="/images/**" location="/images/" />
	<mvc:resources mapping="/installPackage/**" location="/installPackage/" />
	<mvc:resources mapping="/conf/**" location="/conf/" />
	
</beans>

configs.properties

## C3P0 configuration
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@210.10.5.189:1521:orcl
jdbc.username=mapframe
jdbc.password=mapframe
#show sql
showSql=true
#the type of db
dbType=oracle


#administrator
administrator.username=66d4aaa5ea177ac32c69946de3731ec0
administrator.password=91d4b760bf3bf963b775955e12d0a3c2
key=test

default.pwd=5a2e54ee57e5b7273b9a8fed78c1ebd8

login.interceptor.exclude=/login/toLogin.do,/login/login.do,/buss/execute.do,/css/**,/images/**,/js/**,/font/**,/installPackage/getNewest.do,/installPackage/**/*.apk,/conf/**,/config/getFileModifyTime.do,/info/upload.do
permission.interceptor.exclude=/login/toLogin.do,/login/login.do,/login/logout.do,/buss/execute.do,/css/**,/images/**,/js/**,/font/**,/menu/listChildrenMenu.do,/installPackage/getNewest.do,/installPackage/**/*.apk,/conf/**,,/config/getFileModifyTime.do,/info/upload.do


install.package.upload.dir=installPackage

PermissionInterceptor.java

package com.zhxjz.common;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.zhxjz.framework.util.common.PathUtil;

/**
 * 权限拦截器
 * 
 * @author yxyu
 */
public class PermissionInterceptor implements HandlerInterceptor {

	@Value("${permission.interceptor.exclude}")
	private String excludeUrl;

	private List<String> excludeUrls = new ArrayList<String>();

	@PostConstruct
	private void init() {
		String[] urls = excludeUrl.split(",");
		for (String url : urls) {
			excludeUrls.add(url);
		}
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		
		HttpSession session = request.getSession();
		String requestUri = request.getRequestURI();
		String contextPath = request.getContextPath();
		requestUri = requestUri.substring(contextPath.length());
		
		for (String excludeUrl : excludeUrls) {
			if (PathUtil.match(requestUri, excludeUrl)) {
				return true;
			}
		}
		
		if ((Boolean) session.getAttribute("sessAdmin")) {
			return true;
		}
		
		session.setAttribute("sessAdmin", true);
		
		throw new RuntimeException("拦截成功");
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
	}

}

LoginController.java

package com.zhxjz.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 登陆控制器
 * 
 * @author caozj
 * 
 */
@Controller
@RequestMapping("/login")
public class LoginController {

	@Value("${administrator.username}")
	private String adminUserName;

	@Value("${administrator.password}")
	private String adminPassword;

	@Value("${key}")
	private String key;

	/**
	 * 登陆
	 * 
	 * @param userName
	 * @param password
	 * @param model
	 * @param request
	 * @return
	 */
	@RequestMapping("/login.do")
	public String login(String userName, String password, ModelMap model,
			HttpServletRequest request) {
		return "index";
	}

}

PathUtil.java

package com.zhxjz.framework.util.common;

import org.springframework.util.AntPathMatcher;

/**
 * url路径工具类
 * 
 * @author caozj
 * 
 */
public class PathUtil {

	private static AntPathMatcher match = new AntPathMatcher();

	/**
	 * 判断目标url和ant的url路径是否匹配
	 * 
	 * @param targetUrl
	 *            目标url
	 * @param antPath
	 *            ant路径
	 * @return
	 */
	public static boolean match(String targetUrl, String antPath) {
		return match.match(antPath, targetUrl);
	}

	public static void main(String[] args) {
		System.out.println(PathUtil.match("/a/b.do", "/a/**"));
		System.out.println(PathUtil.match("/a/b.do", "/a/*.do"));
		System.out.println(PathUtil.match("/a/b.do", "/b/*.do"));
		System.out.println(PathUtil.match("/a/b.do", "/b/**"));
		System.out.println(PathUtil.match("/a/b.do", "/a/c.do"));
		System.out.println(PathUtil.match("/a/b.do", "/a/b.do"));
	}

}


© 著作权归作者所有

共有 人打赏支持
粉丝 6
博文 165
码字总数 61133
作品 0
成都
程序员
私信 提问
Spring AOP 日志拦截器的事务管理

如果要在方法执行前或后或抛出异常后加上一个自己的拦截器,或者一个环绕拦截器,在拦截器中执行一些操作,比如执行一些数据库操作,记录一些信 息,这些操作通过调用一个服务类的方法来执行...

哲别0
2018/05/18
0
0
Spring 拦截器机制研究与扩展

Spring 拦截器配置有以下三种 第一种 mvc:interceptors </mvc:interceptors> 第二种 mvc:interceptors </mvc:interceptors> 第三种 对指定HandlerMapping加拦截器 <bean class="org.springf......

alex.tong
2012/12/20
0
0
疯狂Spring Cloud连载(9)——RestTemplate的负载均衡原理

本文节选自《疯狂Spring Cloud微服务架构实战》 京东购买地址:https://item.jd.com/12256011.html 当当网购买地址:http://product.dangdang.com/25201393.html Spring Cloud教学视频:htt...

杨大仙的程序空间
2017/10/18
0
2
SpringMVC开发 知识点速查

SpringMVC入门 什么是SpringMVC 实现MVC设计模式的框架 SpringMVC核心组件 DispatcherServlet 前置控制器,调度 Handler 处理器,完成具体业务逻辑 HandlerMapping 将请求映射到Handler,映射...

linxinzhe
2018/05/19
0
0
面试必问的Spring AOP原理、SpringMVC过程

Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。 Sp...

Java干货分享
2018/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么强烈建议大家使用枚举来实现单例

关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的...

群星纪元
24分钟前
8
0
Confluence 6 超过当前许可证期限进行升级

这个页面将会对你在进行 Confluence 升级的时候超过了当前许可证的期限进行升级的情况。 许可证警告 在升级的过程中,你将会在 Confluence 的应用程序日志(log file)中看到类似下面的错误提...

honeymoose
37分钟前
2
0
顶尖战略咨询公司常用分析模型

1、KANO模型 日本教授狩野纪昭(Noriaki Kano)构建出的kano模型。将影响用户满意度的因素划分为五个类型,包括: 魅力因素:用户意想不到的,如果不提供此需求,用户满意度不会降低,但当提供...

Moks角木
53分钟前
2
0
Linux iptables之mangle表使用案例

mangle表的用途 mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。 mangel表使用示例 示例1-策略路由1 内网的客户机通...

月下狼
今天
3
0
OSChina 周日乱弹 —— 兼职我想去学学布偶戏

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy : 《火炎 - 女王蜂》 《火炎 - 女王蜂》 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁 :还在睡觉突然接到一个小哥哥电话“x...

小小编辑
今天
223
8

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部