java url拦截器框架_使用Spring Interceptor实现URL访问校验
本文中介绍我在简单的实际应用中,针对登录用户的访问权限问题的具体实现,整体设计如下图:
图中请求进入Spring容器后会对用户的有效性、权限进行验证,只有验证都通过之后才能进入实际业务逻辑。
上图的实现使用Spring MVC的HandleInterceptor、HandlerInterceptorAdapter实现,下文中将一一介绍到。
HandlerInterceptor接口需要实现类管理请求执行前、执行后、和请求处理完成后所需要执行的动作。代码如下:
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest var1,HttpServletResponse var2, Object var3) throws Exception;
void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;
void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;
}
preHandle:对HTTP请求进行预处理,返回true则请求继续,返回false则需要对Response进行响应
postHandle:在HTTP请求实际业务逻辑完成后(View渲染之前),处理需要做的动作
afterCompletion:在View渲染完成之后,处理需要的动作
如果操作都需要进行控制,可以直接继承该接口并一一实现其中的方法。但有些时候我们并不需要实现这么多的操作,例如:现在我要对访问的路径进行校验,则我只需要实现preHandle方法就可以满足,这里要用到它的适配器HandlerInterceptorAdapter,代码如下:
public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor {
public HandlerInterceptorAdapter() {
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
}
}
afterConcurrentHandlingStarted:该适配器中还对当前拦截器开始执行后的动作进行了拦截处理,适用于在进行验证之前对HTTP请求做一些统一的处理
接着,我们继承该适配器并重写其中的方法就可以达到我们的目的了,在这里以我的权限检查程序片段为例,代码如下:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 从请求中拿到token
String account = request.getParameter(ACCOUNT_KEY);
String token = request.getParameter(TOKEN_KEY);
// 打印Token和请求地址
LOGGER.info("Account------->{}", account);
LOGGER.info("Token--------->{}", token);
LOGGER.info("ReqUrl-------->{}", request.getRequestURI());
// 任意验证属性为空->重新登录
if (StringUtils.isEmpty(account) || StringUtils.isEmpty(token)) {
response.sendRedirect(request.getContextPath() + "/err/needLogin");
return false;
}
// 验证用户有效性.
boolean flag = validateAccount(request, account, token);
if (!flag) {
// 用户权限验证未通过->重新登录
response.sendRedirect(request.getContextPath() + "/err/needLogin");
return false;
}
// 验证路径权限(AntPathMatcher实现)
boolean authFlag = authPath(request, account);
// 打印验证结果
LOGGER.info("UserAuth----->{}", flag);
LOGGER.info("PathAuth----->{}", authFlag);
if (flag && authFlag) {
return true;
} else {
// 未通过路径权限验证,跳转到错误URL
response.sendRedirect(request.getContextPath() + "/err/notAllow");
}
return false;
}
这里根据我的验证逻辑我只实现了preHandle方法,其中使用AntPathMatcher实现路径匹配的实现会在下一篇中详细介绍。实现类完成后需要配置生效,那么在spring的配置文件中,我们可以这么写,代码如下:
不要忘了引入Spring Schema:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
这样我们就通过Spring的拦截器实现了URL访问权限校验。
java url拦截器框架_使用Spring Interceptor实现URL访问校验相关推荐
- java面试 拦截器问题_面试必问:给我说一下Spring MVC拦截器的原理?
拦截器是每个Web框架必备的功能,也是个老生常谈的主题了.本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍1. HandlerExecutionCh ...
- java中的 请求体_在spring mvc test中访问请求体和请求头
我创建了一个spring boot应用程序,这就是我的控制器的样子 . 我使用postman在请求体中发送json,在请求头中发送一个字符串,然后进一步散列json并将其与请求头获取的字符串进行比较 ...
- 用 Java 实现拦截器 Interceptor 的拦截功能
Java 里的拦截器是动态拦截 action 调用的对象,它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也可以在一个 action 执行前阻止其执行,同时也提供了一种 ...
- Java EE拦截器
历史 我认为重要的是要看一下Java EE中的Interceptor的发展,因为它是从EJB特定的项目开始的,后来又演变成一个单独的规范,现在可供其他Java EE规范扩展,这一事实很简单. 版本1. ...
- springboot 拦截器 日志_跟武哥一起学习Spring Boot,一份全面详细的学习教程
SpringBoot现在已经是企业开发项目的标准框架,至少新项目一般都会使用SpringBoot框架,发现有一个SpringBoot的笔记写的非常好,非常全面, 也非常认真,即使你对SpringBoo ...
- java struts 拦截器_java框架篇---struts实现拦截器
Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...
- java登陆拦截器_登陆拦截器LoginInterceptor
[java]代码库package com.liang.bike.interceptor; import com.liang.bike.bean.base.UserBase; import org.ap ...
- [JAVA EE] 拦截器
拦截器 ◼ 拦截器(Interceptor)主要用于拦截用户请求并作相应的处理. ◼ 基于Java的反射机制,属于面向切面编程(AOP)的一种运用. ◼ 应用场景:验证用户登录状态.权限验证.记录系统 ...
- java 搭建企业应用框架_溯源微服务开发体系:一位Java开发者的转型思考
作者丨赵钰莹 简单来说,微服务是将大型单体应用程序和服务拆分为数个甚至数十个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级协议.然而,这个过程涉及很多问题需要解决,比如拆分原则.容量规 ...
最新文章
- Python监控目录和文件变化
- ResourceLoader
- PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
- Linux的scan命令,linux的scan命令
- From NSURLConnection to NSURLSession
- 跨平台移动应用开发框架AppCan2.0开发经验分享
- 一个简单的EXCEL 导入SQL 的例子
- html2cavans
- html5读delphi数据,Delphi HTML解析器
- MATLAB矩阵转置
- Quartz cron表达式(时间表达式)
- 需求分析——系统建模方法
- python 列表、元组、字典、集合
- 英语不好、数学不好能自学编程吗?自学编程出路如何?老程告诉你
- php theexcerpt,WordPress获取文章摘要函数the_excerpt、get_the_excerpt
- 斯坦福ML课程——python转写(Week7—课程作业ex6_2)
- TCP滑动窗口原理终于清楚了!
- 探店视频批量剪辑神器,批量生成音画同步探店视频,好物视频和团购达人视频
- c语言用指针升序降序,C语言函数序——升序降序.doc
- 图森计划裁员25%/ 特斯拉被曝将冻结招聘/ 天才黑客Geohot从推特辞职…今日更多新鲜事在此...
热门文章
- eclipse中自定义videoview类_android控件之VideoView建立自己的播放器
- gui python qt 绘图_最全整理!计算、可视化、机器学习等8大领域38个常用Python库...
- oracle匿名代码块执行insert,MyBatis+Oracle在执行insert时空值报错之从源码寻找解决办法...
- java重_重拾JAVA,重识JAVA(一)
- vue 日期格式化返回指定个数月份_python时间与日期处理一次看个够(time、datetime、calendar)...
- 服务器维保价格标准_汽车后市场大数据研究报告:《汽车后市场乘用车维保行业白皮书》...
- u盘pe无人值守linux,从U盘无人值守安装linux操作系统(纯实践笔记
- oracle 10g crs_stop -all 命令后遇到 UNKNOWN
- activity和fragment生命周期
- oracle11 rman全备,Oracle 11g非归档模式下mount状态RMAN究竟能不能进行全备?