springbootspringmvc拦截器拦截POST、PUT、DELETE请求参数和响。。。
springbootspringmvc拦截器拦截POST、PUT、DELETE请求参
数和响。。。
1.操作⽇志实体类
@Document(collection = "operation_log")
@Getter
@Setter
@ToString
public class OperationLog extends BaseEntityWithId {
private String userId; // 操作⼈
private String resource; // 操作的资源
private String requestMethod; // 请求⽅式
private String beanName; // 操作的类
private String methodName; // 操作的模块
private String requestParams; // 请求的参数
private String responseData; // 返回数据
}
2.拦截器
package com.vian.admin.config;
import com.alibaba.fastjson.JSON;
import com.vian.admin.entity.OperationLog;
import com.vian.admin.event.OperationLogEvent;
import com.vian.core.configuration.event.EventPublisher;
import com.vian.microservice.security.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Aspect
@Component
@Slf4j
public class RequestLogAspect {
@Autowired private EventPublisher eventPublisher;
private ThreadLocal
//拦截web下所有⽅法
@Pointcut("execution(* com.vian.admin.web..*.*(..))")
public void pointcut() {
log.info("拦截请求start");
}
@Before("pointcut()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String beanName = joinPoint.getSignature().getDeclaringTypeName();
String methodName = joinPoint.getSignature().getName();
String uri = request.getRequestURI();
String userId = SecurityUtils.getCurrentUserId();
//get⽅法不记录⽇志
if ("GET".equals(request.getMethod())) {
return;
}
//请求参数
Object[] paramsArray = joinPoint.getArgs();
log.info(
"请求⽇志拦截:userId={}, uri={}, method={}, request={}",
userId,
uri,
request.getMethod(),
paramsArray);
// 组装⽇志数据
OperationLog optLog = new OperationLog();
optLog.setUserId(userId);
optLog.setResource(uri); optLog.setRequestMethod(request.getMethod());
optLog.setBeanName(beanName);
optLog.setMethodName(methodName);
optLog.setRequestParams(argsArrayToString(paramsArray));
logThreadLocal.set(optLog);
}
@AfterReturning(returning = "result", pointcut = "pointcut()")
public void doAfterReturning(Object result) {
try {
// 处理完请求,从线程变量中获取⽇志数据,并记录到db
OperationLog optLog = logThreadLocal.get();
if (null != optLog) {
optLog.setResponseData(JSON.toJSONString(result));
eventPublisher.publish(new OperationLogEvent(this, optLog));
}
} catch (Exception e) {
log.error("***操作请求⽇志记录失败doAfterReturning()***", e);
} finally {
// 清除threadlocal
logThreadLocal.remove();
}
}
/**
* 请求参数拼装
*
* @param paramsArray
* @return
*/
private String argsArrayToString(Object[] paramsArray) {
String params = "";
if (paramsArray != null && paramsArray.length > 0) {
for (int i = 0; i < paramsArray.length; i++) {
Object jsonObj = JSON.toJSON(paramsArray[i]);
params += jsonObj.toString() + " ";
}
}
return params.trim();
}
}测试结果:
springbootspringmvc拦截器拦截POST、PUT、DELETE请求参数和响。。。
springbootspringmvc拦截器拦截POST、PUT、DELETE请求参
数和响。。。
1.操作⽇志实体类
@Document(collection = "operation_log")
@Getter
@Setter
@ToString
public class OperationLog extends BaseEntityWithId {
private String userId; // 操作⼈
private String resource; // 操作的资源
private String requestMethod; // 请求⽅式
private String beanName; // 操作的类
private String methodName; // 操作的模块
private String requestParams; // 请求的参数
private String responseData; // 返回数据
}
2.拦截器
package com.vian.admin.config;
import com.alibaba.fastjson.JSON;
import com.vian.admin.entity.OperationLog;
import com.vian.admin.event.OperationLogEvent;
import com.vian.core.configuration.event.EventPublisher;
import com.vian.microservice.security.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import ng.JoinPoint;
import ng.annotation.AfterReturning;
import ng.annotation.Aspect;
springbootspringmvc拦截器拦截POST、PUT、DELETE请求参数和响。。。 2
springbootspringmvc拦截器拦截POST、PUT、DELETE请求参
数和响。。。
1.操作⽇志实体类
@Document(collection = "operation_log")
@Getter
@Setter
@ToString
public class OperationLog extends BaseEntityWithId {
private String userId; // 操作⼈
private String resource; // 操作的资源
private String requestMethod; // 请求⽅式
private String beanName; // 操作的类
private String methodName; // 操作的模块
private String requestParams; // 请求的参数
private String responseData; // 返回数据
}
2.拦截器
package com.vian.admin.config;
import com.alibaba.fastjson.JSON;
import com.vian.admin.entity.OperationLog;
import com.vian.admin.event.OperationLogEvent;
import com.vian.core.configuration.event.EventPublisher;
import com.vian.microservice.security.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import ng.JoinPoint;
import ng.annotation.AfterReturning;
import ng.annotation.Aspect;
Spring MVC拦截器详解
Spring MVC拦截器详解
1.
package com.gary.util.spring;
2.
3. import javax.servlet.http.HttpServletRequest;
4. import javax.servlet.http.HttpServletResponse;
5.
6. import mons.logging.Log;
7. import mons.logging.LogFactory;
8. import org.springframework.beans.factory.InitializingBean;
9. import org.springframework.web.servlet.ModelAndView;
10. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
11.
12. /**
13. * Spring MVC拦截器
14. * @author gary
15. *
16. */
17. public class CommonInterceptor extends HandlerInterceptorAdapter implements InitializingBean{
18.
19. static Log log = LogFactory.getLog(CommonInterceptor.class);
20.
21. /**
22. * 在系统启动时执行
23. */
24. public void afterPropertiesSet() throws Exception {
关于Spring MVC拦截器的简介以及使用
龙源期刊网
关于Spring MVC拦截器的简介以及使用
作者:陶艳芳
来源:《知音励志·社科版》2017年第01期
摘 要Spring MVC拦截器作为Spring MVC中的一部分,在实际工作中得到广泛的应用,在项目中合理使用拦截器,可以解决许多常见的问题,本文主要会简单概述什么是Spring
MVC拦截器,如何通过代码的方式来配置拦截器,使用拦截器的场景,最后就是简述拦截器与过滤器的对比,通过详细的描述,你会对Spring MVC中拦截器的使用会有更深刻的理解。
【关键词】拦截器;Spring MVC;过滤器
1 什么是拦截器
在了解拦截器之前,我们首先要了解一些基本知识。我们都知道,当我们在浏览器中输入URL地址的时候,作为客户端的浏览器就会向对应的服务器发送一个请求,同时,浏览器中的Burl地址通过各种get或者post的方式向服务器提交数据,服务器在得到这些数据前,如果我们想对数据进行修改或者配置,那么这个时候我们就需要使用到拦截器,简单来说,拦截器就像海关,如果你携带的东西不合标准,就扣下,符合了标准,才会让你通行。拦截器在Spring MVC中处理字符编码和权限管理的时候有很大的作用。
2 拦截器的工作原理
要想了解拦截器的工作原理,我们首先要对Spring MVC的整体工作流程有了解,下面我就简单介绍Spring MVC的工作流程,在最新版的Spring MVC中,工作流程如下:当用户在浏览器地址栏输入一个Burl请求的时候,该请求首先会找到配置文件中的DispatcherServlet,如果你没有配置,那么此时会报错,如果配置好了,那么下一步就是找到HandlerMapping来找到对应的HandlerAdapter,这样能找到你自己写好的Handler,这里的Handler指的就是你用来处理该请求的类,当然,你可以通过注解的方式来配置。在这个Handler中,返回对象会是一个ModelAndView对象,这其中的Model表示的就是处理这个url请求得到的数据结果,这里的View就是服务器返回给该请求的响应界面,这样Spring MVC框架就会携带数据到对应的界面,从而展示结果给该URL请求。在了解了Spring MVC的工作流程后,我们就很好理解了,拦截器就是通过一些特殊的技术,在Burl请求发送到DispatcherServlet之间进行了拦截。
SpringBoot配置拦截器方式实例代码
SpringBoot配置拦截器⽅式实例代码
步骤:
1.实现WebMvcConfigurer配置类
2.实现拦截器 3
. 把拦截器添加到配置中
4.添加需要拦截的请求
5.添加需要排除的请求
package com.zp.springbootdemo.interceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 和springmvc的webmvc拦截配置⼀样
* @author zp
*/
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
/**
* 拦截器配置
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns拦截所有请求,excludePathPatterns排除特殊的请求
//registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**");
registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**");
//excludePathPatterns 排除的请求
浅谈SpringMVC的拦截器(...
浅谈SpringMVC的拦截器(...
1.过滤器:
依赖于servlet容器。在实现上基于函数回调,可以对⼏乎所有请求进⾏过滤,但是缺点是⼀个过滤器实例只能在容器初始
化时调⽤⼀次。使⽤过滤器的⽬的是⽤来做⼀些过滤操作,获取我们想要获取的数据.
⽐如:在过滤器中修改字符编码;在过滤器中修改 HttpServletRequest的⼀些参数,包括:过滤低俗⽂字、危险字符等
关于过滤器的⼀些⽤法可以参考我写过的这些⽂章:
2.拦截器:
依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于⾯向切⾯编程
(AOP)的⼀种运⽤。由于拦截器是基于web框架的调⽤.
因此可以使⽤spring的依赖注⼊(DI)进⾏⼀些业务操作,同时⼀个拦截器实例在⼀个controller⽣命周期之内可以多次调
⽤。但是缺点是只能对controller请求进⾏拦截,对其他的⼀些⽐如直接访问静态资源的请求则没办法进⾏拦截处理。
关于拦截器的⼀些⽤法可以参考我写过的这些⽂章:
3.执⾏顺序
过滤器的运⾏是依赖于servlet容器的,跟springmvc等框架并没有关系。并且多个过滤器的执⾏顺序跟web.xml⽂件中定
义的先后关系有关。
拦截器的执⾏顺序跟在SpringMVC的配置⽂件中定义的先后顺序有关。
SpringMVC的配置⽂件:
res
msg
errmsg
到此这篇关于浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置⽂件
的⽂章就介绍到这了,更多相关SpringMVC拦截器 Servlet过滤器 SpringMVC配置⽂件内容请搜索以前的⽂章或继续浏览下⾯
SpringBoot日记——登录与拦截器篇
SpringBoot⽇记——登录与拦截器篇
之前的⽂章我们把登录页写了出来,但是想要让登录现实他的基本功能,要如何做呢?本篇⽂章就来帮你实现第⼀步,让登录页对账号密
码做校验,并且完成登录跳转。
LoginController
1. 要实现登录,我们需要先编写⼀个登录的controller类:(每⼀步的注释应该⽐较详细了~)
@Controller
public class LoginController {
// 发送post请求,代替了RequestMapping(value="/user/login", method="post")
@PostMapping(value = "/user/login")
// 对登录请求判断request的参数值,并存放在map中
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map map) {
// 我们判断,如果登录名不是空,并且,密码是 123456 就登录成功(暂不涉及数据库)
if (!StringUtils.isEmpty(username) && "123456".equals(password)) {
// 登录成功,就跳转到下⼀个页⾯
return "dashboard";
} else {
// 登录失败,刷新本登录页
map.put("msg", "⽤户名密码错误");
return "login";
}
}
}
为了开发⽅便,我们还可以将application.properties中添加⼀个 禁⽤缓存的参数: spring.thymeleaf.cache=fasle ,这样html页⾯有改动
的时候,我们只需要⽤快捷键crtl+F9或者点击如图的编译按钮,重新编译下就可以在页⾯看结果,⽽不需要再次启动Tomcat服务了。
SpringBoot常见getpost请求参数处理、参数注解校验及参数自定义注解校验详解
SpringBoot常见getpost请求参数处理、参数注解校验及
参数⾃定义注解校验详解⽬录
springboot常见httpget,post请求参数处理
PathVaribale获取url路径的数据
RequestParam获取请求参数的值注意
GET参数校验
POSTJSON参数校验⾃定义注解校验
总结
spring boot 常见http get ,post请求参数处理
在定义⼀个Rest接⼝时通常会利⽤GET、POST、PUT、DELETE来实现数据的增删改查;这⼏种⽅式有的需要传递参数,后台开发⼈员必须对接收到的参数进⾏参数验证来确保程序的健壮性
GET⼀般⽤于查询数据,采⽤明⽂进⾏传输,⼀般⽤来获取⼀些⽆关⽤户信息的数据
POST⼀般⽤于插⼊数据
PUT⼀般⽤于数据更新
DELETE
⼀般⽤于数据删除
⼀般都是进⾏逻辑删除(即:仅仅改变记录的状态,⽽并⾮真正的删除数据)
@PathVaribale 获取url中的数据
@RequestParam 获取请求参数的值
@GetMapping 组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写
@RequestBody 利⽤⼀个对象去获取前端传过来的数据
PathVaribale 获取url路径的数据
请求URL:
localhost:8080/hello/id 获取id值
实现代码如下:
@RestController
public class HelloController {
@RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
return "id:"+id+" name:"+name;
SpringMVC拦截器interceptor用法详解
SpringMVC拦截器interceptor⽤法详解
Spring MVC-拦截器
今天就是把有关拦截器的知识做⼀个总结。
1.拦截器概述
1.1 什么是拦截器?
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要⽤于拦截⽤户请求并作相应的处理。例如
通过拦截器可以进⾏权限验证、记录请求信息的⽇志、判断⽤户是否登录等。
要使⽤Spring MVC中的拦截器,就需要对拦截器类进⾏定义和配置。通常拦截器类可以通过两种⽅式来定义。
1.通过实现HandlerInterceptor接⼝,或继承HandlerInterceptor接⼝的实现类(如HandlerInterceptorAdapter)来定义。
2.通过实现WebRequestInterceptor接⼝,或继承WebRequestInterceptor接⼝的实现类来定义。
以实现HandlerInterceptor接⼝⽅式为例,⾃定义拦截器类的代码如下:
package com.mmm.interceptors;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 创建⾃定义的拦截器
01.务必实现 HandlerInterceptor!
02.我们使⽤的拦截器其实就是针对于Handler的拦截器===》处理器拦截器
03.核⼼控制器中的HandleMapping返回的就是⼀个
处理器执⾏链 = Handler+ Interceptors(处理器拦截器)*/
public class MyInterceptor implements HandlerInterceptor{
SpringBoot之HandlerInterceptor拦截器的使用详解
SpringBoot之HandlerInterceptor拦截器的使⽤详解
前⾔
平常项⽬开发过程中,会遇到登录拦截,权限校验,参数处理,防重复提交等问题,那拦截器就能帮我们统⼀处理这些问题。
⼀、实现⽅式
1.1 ⾃定义拦截器
⾃定义拦截器,即拦截器的实现类,⼀般有两种⾃定义⽅式:
定义⼀个类,实现org.springframework.web.servlet.HandlerInterceptor接⼝。
定义⼀个类,继承已实现了HandlerInterceptor接⼝的类,例如org.springframework.web.servlet.handler.HandlerInterceptorAdapter抽象类。
1.2 添加Interceptor拦截器到WebMvcConfigurer配置器中
⾃定义配置器,然后实现WebMvcConfigurer配置器。
以前⼀般继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter类,不过SrpingBoot 2.0以上WebMvcConfigurerAdapter类就过时了。有以下2中替代⽅法:
直接实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接⼝。(推荐)
继承org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport类。但是继承WebMvcConfigurationSupport会让SpringBoot对mvc的⾃动配置失效。不过⽬前⼤多数项⽬是前后端分离,并没有对
静态资源有⾃动配置的需求,所以继承WebMvcConfigurationSupport也未尝不可。
⼆、HandlerInterceptor ⽅法介绍
