我是靠谱客的博主 可耐枕头,最近开发中收集的这篇文章主要介绍java拦截器怎么配_Java拦截器+注解搭配使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

拦截器加注解可以实现登录权限验证等操作,我的应用场景也是为了验证这个,下面是简单的实现步骤

一、什么是拦截器?

拦截器是对action的一种拦截,可以在请求前后进行一些处理

可拦截controller和view内容

二、Spring中自定义拦截器步骤

1、Spring中继承HandlerInterceptorAdapter或实现HandlerInterceptor接口

public class Auth58Interceptor extends HandlerInterceptorAdapter {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

return true;

}

}

2、重写preHandler等方法

HandlerInterceptorAdapter下的有几个方法分别处理拦截请求的操作前后的内容,可根据自己需要选择方法重写

业务处理请求之前:preHandle

该方法返回boolean类型值,如果为true继续下面的内容,为false直接退出该请求,不会继续执行了

preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

业务处理请求之后,DispatcherServlet渲染ModelAndView视图之前:postHandle

preHandle返回true时才会执行这里

postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)

业务处理请求之后,DispatcherServlet渲染了ModelAndView视图之后:afterCompletion

preHandle返回true时才会执行这里

afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

有异步请求时触发:afterConcurrentHandlingStarted

在preHandle返回true之后才执行这里,这里执行完成之后会触发postHandle和afterCompletion

afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)

3、在web.xml中注册拦截器

可以设置多个interceptor拦截器,从上至下进行匹配拦截

mvc:mapping path="":匹配那种路径可以命中拦截器,如果不配置或配置/**将会拦截所有Controller

mvc:exclude-mapping path="":排除该路径不进行拦截,静态资源进行拦截我这里会出问题,所以排除掉

bean class="":拦截器的类,包含包名的全路径

例子如下:

三、拦截器和注解配合使用

自定义注解的方式详见:http://www.cnblogs.com/meitian/p/9048331.html

我这里用途是,判断接口需要的权限,进而查看当前用户是否有访问全新

步骤1:拦截器重新preHandler()方法,解析自定义注解上的属性值

步骤2:获得当前请求信息中的用户信息,从数据库中拿到当前登录用户的权限

步骤3:通过步骤2获得当前用户权限和步骤1中限定的权限作对比,判断是否允许继续访问或是跳转到登录等其他操作

一个未处理逻辑的例子如下:

拦截器代码:

package com.xxx.annotations;

import org.springframework.web.method.HandlerMethod;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.lang.annotation.Annotation;

public class Auth58Interceptor extends HandlerInterceptorAdapter {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

HandlerMethod handlerMethod = (HandlerMethod) handler;

if(handlerMethod.getBeanType().isAnnotationPresent(Auth58.class)){//注意要用handlerMethod.getBeanType()获得对象,不能通过getClass()获得对象

System.out.println("命中拦截器");

return true;

}else{

System.out.println("未命中拦截器");

return true;

}

}

}

注意:要用handlerMethod.getBeanType()获得对象,不能通过getClass()获得对象

解析注解属性值和进一步的判断方法这里就不写了,解析属性值的上面注解那篇里有介绍

单独业务逻辑各位就单独处理吧

最后

以上就是可耐枕头为你收集整理的java拦截器怎么配_Java拦截器+注解搭配使用的全部内容,希望文章能够帮你解决java拦截器怎么配_Java拦截器+注解搭配使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部