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 ...
随机推荐
- C#操作剪贴板实现复制粘贴
//粘贴 private void tsbPaste_Click(object sender, EventArgs e) { IDataObject iData = Clipboard.GetData ...
- linux中bashrc与profile的区别
bashrc与profile的区别 要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shell. ...
- 题解-bzoj4320 Homework
Problem bzoj4320 Solution 前置技能:分块+线段树+卡常+一点小小的数学知识 考试时A的 这种题无论怎么处理总有瓶颈,套路分块,设\(k\)以下的插入时直接暴力预处理,查询时直 ...
- CreateDialog和DialogBox
原文地址:https://blog.csdn.net/aikker/article/details/5631412 INT_PTR DialogBox( HINSTANCE hIns ...
- $Django ajax简介 ajax简单数据交互,上传文件(form-data格式数据),Json数据格式交互
一.ajax 1 什么是ajax:异步的JavaScript和xml,跟后台交互,都用json 2 ajax干啥用的?前后端做数据交互: 3 之前学的跟后台做交互的方式: -第一种:在浏览器 ...
- Zeppelin0.7.2结合hive解释器进行报表展示
前提:服务器已经安装好了hadoop_client端即hadoop的环境hbase,hive等相关组件 1.环境和变量配置①拷贝hive的配置文件hive-site.xml到zeppelin-0.7. ...
- Ex 2_16 给定一个无穷数组..._第二次作业
先比较数组的A[0]元素,若不相等接下来比较A[1],A[2],A[4],A[8]…,若找到一个区间A[2n-1]<x<A[2n],再对这个区间进行折半查找操作.总的时间为O(logn). ...
- 轻松搞懂elasticsearch概念
本文主要介绍elasticsearch6.0的一些基本概念,有助于深入理解.研究elasticsearch和elk系统 一图胜千言 elasticsearch与mysql参照来看 添加一条数据 紫 ...
- 洛谷P3317 [SDOI2014]重建 [Matrix-Tree定理]
传送门 思路 相信很多人像我一样想直接搞Matrix-Tree定理,而且还过了样例,然后交上去一分没有. 但不管怎样这还是对我们的思路有一定启发的. 用Matrix-Tree定理搞,求出的答案是 \[ ...
- Confluence 6 恢复一个站点问题解决
如果你在导入的时候遇到了问题,检查下面的一些提示. 你的文件太大而不能上传?这个是非常常见的错误.出现的原因是备份文件不能在规定的时间内上传到服务器上.为了避免这个错误,放置你的导出文件到 < ...