Spring MVC基础知识整理➣拦截器和自定义注解
概述
Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息。当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理。在 MVC中,我们常用的注解@Controller、 @RequestMapping等,通过设置注解里面的方法值来实现不同数据的处理方式。
如@RequestMapping(value="/City",method=RequestMethod.GET),我们标注请求映射地址和请求的方式;通过解读这些属性信息,来实现内部不通的处理方式。
自定义注解
新建Annotation(注解),实例代码如下
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Documented //输出文档格式化
@Inherited
@Target(ElementType.METHOD) //这是一个对方法的注解,还可以是包、类、变量等很多东西
@Retention(RetentionPolicy.RUNTIME)//保留时间,一般注解就是为了框架开发时代替配置文件使用,JVM运行时用反射取参数处理,所以一般都为RUNTIME类型
public @interface AuthPassport {
//是否启用验证信息
boolean validate() default true;
//权限等级编码
String PowerCode() default "admin";
}
添加方法的注释类
public class HelloWorldController
{
@AuthPassport(validate=true,PowerCode="EveryOne")
@RequestMapping(value={"/*","/say"},method=RequestMethod.GET)
public ModelAndView China()
{
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello World!");
modelAndView.setViewName("HelloWorld/CIndex");
return modelAndView;
}
}
获取注解类信息
import java.lang.reflect.Method;
public class TestThis {
public static void main(String[] args) throws Exception {
// 提取到被注解的方法Method,这里用到了反射的知识
Method method = Class.forName("HelloWorldController").getDeclaredMethod("China");
// 从Method方法中通过方法getAnnotation获得我们设置的注解
AuthPassport oneAnnotation = method.getAnnotation(AuthPassport.class);
// 得到注解的俩参数
System.out.println(oneAnnotation.validate());
System.out.println(oneAnnotation.PowerCode());
}
}
拦截器
针对MVC的数据请求,我们可以配置响应的Bean(拦截器)进行数据拦截,自定义拦截器需要继承HandlerInterceptorAdapter类,重写该类的三个方法(preHandle、postHandle、afterCompletion),其中afterCompletion响应之后触发的方法,preHandler响应之前处理方法,postHandle是标识响应中触发的方法。我们可以在preHandler里面进行数据的校验,比如权限的校验、登录信息的校验等信息的处理。HandlerInterceptorAdapter的源码:
public interface HandlerInterceptor {
boolean preHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler)
throws Exception;
void postHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView)
throws Exception;
void afterCompletion(
HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception;
}
自定义拦截器如下
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import justin.com.comclass.AuthPassport; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class AuthInterceptor extends HandlerInterceptorAdapter { @Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if(handler.getClass().isAssignableFrom(HandlerMethod.class))
{
AuthPassport authpassport=((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class);//使用自定义注解
if(authpassport==null || authpassport.validate()==false)
{
return true;
}
else
{
System.out.println("测试注解");
boolean IsValieData=request.isRequestedSessionIdValid();
//在这里实现自己的权限验证逻辑
if(!IsValieData)//如果验证成功返回true(这里直接写false来模拟验证失败的处理)
return true;
else//如果验证失败
{
//返回到登录界面
response.sendRedirect("../login/index");
return false;
}
}
}
else
{
return true;
}
}
}
在spring-servletconfig.xml 中配置拦截器信息
<mvc:interceptors>
<!-- 如果不定义 mvc:mapping path 将拦截所有的URL请求 -->
<bean class="justin.com.fileter.AuthInterceptor"></bean>
</mvc:interceptors>
至此MVC自定义的拦截器整理完毕!
Spring MVC基础知识整理➣拦截器和自定义注解的更多相关文章
- Spring MVC基础知识整理➣国际化和异常处理
概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...
- Spring MVC基础知识整理➣环境搭建和Hello World
概述 Spring MVC属于SpringFrameWork的产品,采用Model-View-Controller进行数据交互,已经融合在Spring Web Flow里面.Spring 框架提供了构 ...
- Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibern ...
- Spring MVC基础知识整理➣数据校验与格式化
概述 将view中Form的数据提交到后台之后,后台如何验证数据的有效性?在这里Spring MVC提供了相应的Hibernate类包(hibernate-validator-4.3.1.Final. ...
- Spring MVC基础知识整理➣View与Controller数据交互
概述 Spring MVC是由View—Controller—Model组成,其中View和Controller的数据交互,成为了关注的核心点.MVC中,我们将View中的数据传递到Controlle ...
- Spring MVC全局异常处理与拦截器校检
在使用Spring MVC进行开发时,总是要对系统异常和用户的异常行为进行处理,以提供给用户友好的提示,也可以提高系统的安全性. 拦截系统响应错误 首先是拦截系统响应错误,这个可以在web.xml中配 ...
- Spring MVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- spring mvc 用cookie和拦截器实现自动登录(/免登录)
Cookie/Session机制详解:http://blog.csdn.net/fangaoxin/article/details/6952954 SpringMVC记住密码功能:http://blo ...
- Spring框架系列(一)--Spring MVC基础知识
Web项目开发过程中一般都是使用MVC(Model-View-Controller)模式,早先的Struts2到Spring MVC,再到现在Spring Boot,都是相似的思 路.Spring B ...
随机推荐
- LSH(Locality Sensitive Hashing)原理与实现
原文地址:https://blog.csdn.net/guoziqing506/article/details/53019049 LSH(Locality Sensitive Hashing)翻译成中 ...
- hibernate框架学习之对象状态
lHibernate对象共有三种状态 •瞬时状态:瞬时对象 •持久化状态:持久化对象 •托管状态:托管对象 l瞬时对象(Transient Object),简称TO l瞬时对象指的是应用程序创建出来的 ...
- hdu 4825 && acdream 1063 01字典树异或问题
题意: 给一个集合,多次询问,每次给一个k,问你集合和k异或结果最大的哪个 题解: 经典的01字典树问题,学习一哈. 把一个数字看成32位的01串,然后查找异或的时候不断的沿着^为1的路向下走即可 # ...
- OpenStack实践系列⑦深入理解neutron和虚拟机
OpenStack实践系列⑦深入理解neutron和虚拟机 五.深入理解Neutron 5.1 虚拟机网卡和网桥 [root@node1 ~]# ifconfig brq65c11cc3-8e: fl ...
- appium+java(二)appium初始化参数部分详解
Capabilities介绍 实际上它的全称是:Desired capabilities Desired capability是一个JSON对象,包含一组key和value值.它由客户端发送给服务端, ...
- 小白6步搞定vue脚手架创建项目
1.安装node及npm node -v (测试node是否安装成功)npm -v(测试npm是否安装成功) 2.安装cnpm npm install -g cnpm --registry=http: ...
- 清北学堂 清北-Day5-R2-xor
有 $ n $ 个物品,每个物品有两个属性 $ a_i,b_i $ ,挑选出若干物品,使得这些物品 $ a_i $ 的异或和 $ x \le m \(.问在这一限制下,\) b_i $ 的总和最大可能 ...
- 解决 安装或卸载软件时报错Error 1001 的问题
卸载或安装程序时出错1001:错误1001可能发生在试图更新.修复或卸载windows os中的特定程序时.此问题通常是由于程序的先前安装损坏而引起的. 错误“1001”通常会遇到,因为程序的先前安装 ...
- Oracle12c从入门到精通(第二版) PDF 下载
一:下载地址: 二:本书图样 三本书目录 前言 第一章 Oracle数据库概述 第二章 Oracle在Windows 8上的安装与配置 第三章 SQL基础 第四章 Oracle PL/SQL及编程 第 ...
- centos 7.3 设置静态IP
注:本文来源:张亮博客 的 <centos 7.3 设置静态IP或ping 报name or service not known> 首先把虚拟机配置为桥接模式,然后开启再你打算修改虚拟机 ...