-
2022-04-02 10:35:17
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface SendAuthorize { }
@Configuration public class SendAuthorizeConfig implements WebMvcConfigurer { @Autowired private SendAuthorizeInterceptor sendAuthorizeInterceptor ; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(sendAuthorizeInterceptor).addPathPatterns("/**"); } }
import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.joolun.common.core.domain.AjaxResult; import com.joolun.common.utils.SecurityUtils; import com.joolun.common.utils.ServletUtils; import com.joolun.weixin.entity.WxUser; import com.joolun.weixin.service.WxUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author yhh * @Description: * @date 2022-04-01 9:25 */ @Component public class SendAuthorizeInterceptor extends HandlerInterceptorAdapter { @Autowired private WxUserService wxUserService ; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { /** * handler保存了本次请求的controller也就是接口方法的一些信息,如类,方法,参数等 * 如果是一次静态资源的请求则该handler不应该是HandlerMethod的实现类 * 判断是否是一个正常的接口,如果是则进行鉴权操作,不是则直接放行 */ if (handler instanceof HandlerMethod) {//如果一直false,请看导出的包是否正确 HandlerMethod handlerMethod = (HandlerMethod) handler; SendAuthorize sendAuthorize = handlerMethod.getMethod().getAnnotation(SendAuthorize.class); if (null != sendAuthorize) { // 对用户进行鉴权 if (hasPermission()){ AjaxResult ajaxResult = AjaxResult.error("当前转赠功能已被锁定!"); ServletUtils.renderString(response, JSONObject.toJSONString(ajaxResult)); return false; } return true; } } return true; } // 用户鉴权具体方法 private boolean hasPermission() { Long userID = SecurityUtils.getLoginUser().getUser().getUserId(); WxUser one = wxUserService.getOne(Wrappers.<WxUser>lambdaQuery() .eq(WxUser::getDelFlag, CommonConstants.NO) .eq(WxUser::getSendLock, "1") .eq(WxUser::getId, userID) ); if(ObjectUtil.isNotEmpty(one)){ return true ; } return false; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
更多相关内容 -
java 元注解+拦截器实现自定义注解.rar
2021-08-19 14:31:36java 元注解+拦截器实现自定义注解 @CmwAutoWired:自定义依赖注入 注意:注入的接口和实现类需要在同一包名下,注解的是类则无限制 @FieldAnnotation:自定义属性注解 @MethodAnnotation:自定义方法注解 @... -
java 动态代理实现注解日志拦截
2016-04-02 22:47:28java动态代理对象实现日志输出,另外再配上annotation实现注解输出。 -
Java-注解拦截器
2020-05-08 16:37:08总结: 创建注解类 自定义拦截器实现 HandlerInterceptor类,重写preHandle方法,在其实现判断逻辑 注入自定义的拦截器,实现WebMvcConfigurer ,重写addInterceptors方法,配置拦截所有路径 如有转载请请务必保留...一:环境
- 创建个spring boot 2.1.2版本
- 有个能正常调用的接口
二:pom配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
三:创建个注解类
package com.example.demo.config; import java.lang.annotation.*; /** * @author huang(jy) * @version 1.0 * @date 2020/5/8 14:39 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) //是否需要登录拦截 public @interface NeedLogin { //是否需要登录拦截,默认不需要 boolean needLoginValue() default false; }
四:创建自定义拦截器类
package com.example.demo.config; import com.alibaba.fastjson.JSONObject; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; /** * @author huang(jy) * @version 1.0 * @date 2020/5/8 14:48 */ public class NeedLoginInterceptors implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //判断是否有注解 boolean isNeed = handler.getClass().isAssignableFrom(HandlerMethod.class); if (isNeed) { //获取到这个注解信息 NeedLogin needLogin = ((HandlerMethod) handler).getMethodAnnotation(NeedLogin.class); if (needLogin != null && needLogin.needLoginValue()) { return true; } } //重置response response.reset(); //设置编码格式 response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.write(JSONObject.toJSONString("无权限")); return false; } }
五:拦截器注入WebMvcConfigurerAdapter
package com.example.demo.config; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * @author huang(jy) * @version 1.0 * @date 2020/5/8 15:05 */ @Component public class WebMvcConfigurerAdapter implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //注册NeedLoginInterceptors拦截器 InterceptorRegistration registration = registry.addInterceptor(new NeedLoginInterceptors()); registration.addPathPatterns("/**");//拦截所有路径 } }
六:测试是否生效
1.注解为:true,结果如下图
2.注解不填,默认为false,结果如下图(返回为拦截器里的提示信息)
3.不写注解,结果如下(返回为拦截器里的提示信息);
总结:
创建注解类 自定义拦截器实现 HandlerInterceptor类,重写preHandle方法,在其实现判断逻辑 注入自定义的拦截器,实现WebMvcConfigurer ,重写addInterceptors方法,配置拦截所有路径
如有转载请请务必保留此出处:https://blog.csdn.net/hometing218/article/details/105998169
-
轻松实现java拦截器+自定义注解
2021-03-16 16:47:51本文将用简洁的代码构建一个springboot的拦截器。拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就...项目结构:TokenInterceptor.java 自定义拦截器InterceptorConfig.java 添加拦截器进入项目NoN...本文将用简洁的代码构建一个springboot的拦截器。拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。为了方便,之后又引入了注解。
目录和概述
概述
假设需求:访问项目的controller是都要进行"token验证",除了某些像登录之类的方法。
项目结构:
TokenInterceptor.java 自定义拦截器
InterceptorConfig.java 添加拦截器进入项目
NoNeedToken.java 自定义注解
TestController.java 测试接口
目录
1、自定义拦截器
在 TokenInterceptor.java 中输入以下代码,以下的代码将生成一个在请求到达controller前进行拦截的拦截器
import com.alibaba.fastjson.JSONObject;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
@Component
public class TokenInterceptor implements HandlerInterceptor {
// 假设现在的token有如下数据
List tokenList = Arrays.asList("111", "222", "333");
// 这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 设置返回为json格式,使用UTF-8
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String token = request.getHeader("token");
PrintWriter out;
// 之后写你的判断逻辑:return true是通过拦截器,可以继续访问controller,return false是不通过
if (token == null || !tokenList.contains(token)) {
// 如果失败了返回{state:"false", msg:"token is null or wrong"}
JSONObject res = new JSONObject();
res.put("state","false");
res.put("msg","token is null or wrong");
out = response.getWriter();
out.append(res.toString());
return false;
}
// 否则返回true 进入controller
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
2、载入拦截器
将以下代码写在InterceptorConfig.java中 ,使用addInterceptors方法将我们定义的拦截器添加进入项目中
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Resource
TokenInterceptor tokenInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 设置所有的路径都要进行拦截,除了/test/login
registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")
.excludePathPatterns("/test/login");
}
}
3、测试成功
将如下代码到TestController中,用于测试拦截器效果
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
// canload用于检测拦截器是否正常工作
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "/canload")
public Map canLoad(){
Map res = new HashMap<>();
res.put("state", "ok");
res.put("msg", "you can load");
return res;
}
// login模拟登录时token返回
@RequestMapping(value = "/login")
public String login(){
return "111";
}
}
可以看到如下结果
①直接登录成功
②直接访问canload失败
③使用postman,带上token进行访问成功
4、使用注解(Annotation)进行选择
你也可以使用注解来代替第三步配置中的excludePathPatterns(), 来实现对于指定方法和controller的免token访问,新建一个NoNeedToken.java注解,在拦截器里判断注解存在时,直接return true放行
NoNeedToken.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.TYPE}) //注解的范围是类、接口、枚举的方法上
@Retention(RetentionPolicy.RUNTIME)//被虚拟机保存,可用反射机制读取
public @interface NoNeedToken {
}
响应的更改自定义拦截器的 preHandle方法,和拦截器配置
① 自定义拦截器
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String token = request.getHeader("token");
PrintWriter out;
// 对于注解的判断---------------------------------------------------
HandlerMethod handlerMethod = (HandlerMethod) handler;
if(handlerMethod.getMethodAnnotation(NoNeedToken.class)!=null || handlerMethod.getBeanType().isAnnotationPresent(NoNeedToken.class)){
// 如果自己拥有NoNeedToken标注或者所属的class拥有NoNeedToken 就直接放行
return true;
}
//------------------------------------------------------------------
if (token == null || !tokenList.contains(token)) {
JSONObject res = new JSONObject();
res.put("state","false");
res.put("msg","token is null or wrong");
out = response.getWriter();
out.append(res.toString());
return false;
}
return true;
}
② 去除拦截器配置中的去除项
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenInterceptor).addPathPatterns("/**");
// .excludePathPatterns("/test/login");
}
③ 在测试的login方法上添加注释
@RequestMapping(value = "/login")
@NoNeedToken
public String login(){
return "111";
}
修改完成之后效果和上面相同
5、常见问题
1.这个自定义注解的那些@Target,@Retention,@Documented是什么意思
https://blog.csdn.net/zt15732625878/article/details/100061528,这篇文章写的很详细了
2.为什么我的注解加了,还是被拦截了
一般出现这种情况是类与方法的获取注解方式不同,在本文中作者使用了下面的一句话来表述
handlerMethod.getMethodAnnotation(NoNeedToken.class)!=null || handlerMethod.getBeanType().isAnnotationPresent(NoNeedToken.class)
其中handlerMethod.getMethodAnnotation(NoNeedToken.class)!=null是对于方法的
而handlerMethod.getBeanType().isAnnotationPresent(NoNeedToken.class)是对于类的
结语:希望对大家有帮助
-
java注解拦截器,数据库自动解密
2020-01-16 11:32:59拦截基于数据库实体类数据库中加密数据新建注解类:根据执行的sql包含update和query拦截到有注解的字段:数据库的user实体类代码如下:总结:数据库加上对应注解,update和query的语句进入实体找到注解的拦截器过滤...注解方式,数据库的数据自动解密,拦截基于数据库实体类
数据库中加密数据
新建注解类:
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptField {
String value() default “”;
}根据执行的sql包含update和query拦截到有注解的字段,通过反射机制获取指定参数的值:
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface EncryptField { String value() default ""; } ```java // 解密密拦截 @Intercepts({ @Signature(type=Executor.class,method="update",args={MappedStatement.class,Object.class}), @Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class}) }) public class ParameterInterceptor implements Interceptor { protected final Logger log = Logger.getLogger(getClass()); public static final String KEY = "BDA52970EFA896C18A5D37C0"; @Override public Object intercept(Invocation invocation) throws Throwable { MappedStatement statement = (MappedStatement) invocation.getArgs()[0]; String methodName = invocation.getMethod().getName(); Object parameter = invocation.getArgs()[1]; BoundSql sql = statement.getBoundSql(parameter); log.error(sql.getSql()); Object returnValue = invocation.proceed(); if(returnValue instanceof ArrayList<?>){ List<?> list = (ArrayList<?>)returnValue; for(Object val:list){ //通过反射获取修改参数 Field[] fields = val.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true); if(fields[i].isAnnotationPresent(EncryptField.class) && fields[i].getType().toString().endsWith("String")) { String data = ""; String par = (String) getFieldValueByName(fields[i].getName(),val); try { //AppDESUtil解密的方法,根据你自己需求定义 data = AppDESUtil.decrypt(par, KEY); if (null == data || "".equals(data)){ data = par; } } catch (Exception e){ // 如果之前没有加密数据直接用直接前的 data = par; } fields[i].set(val,data); } } } } return returnValue; } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { // TODO Auto-generated method stub } /* 根据属性名获取属性值 * */ private static Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { return null; } } }
数据库的user实体类代码如下:
总结:数据库加上对应注解,update和query的语句进入实体找到注解的拦截器过滤解密在返回,如此写完解密的加上注解即可
-
Java注解与拦截器
2016-06-23 09:56:28Annotation(注解),也叫元数据。一种代码级别的说明,是JDK5.0引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。 Annotion是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象... -
java注解的注解拦截问题
2017-04-22 13:10:00但始终觉得这种方式不好,因为如果还有其他注解,都要有TryAgain的功能,那么每增加一个注解都必须添加一个或的拦截条件,有没有更好的方式,能够拦截TryAgain注解以及所有用TryAgain注解修饰了的注解? -
Java注解实现拦截
2015-12-09 10:13:14Java注解实现拦截 Leave a reply 一个很常见的场景是对方法进行拦截,比如计算方法的执行时间或者判断是否有执行该方法的权限。常用的拦截框架有AOP和aspectj,这两种拦截器使用不同的原理。AOP使用动态... -
Java-切面注解拦截器
2020-05-08 16:59:16/** * @author huang(jy) * @version 1.0 * @date 2020/5/8 14:39 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) //是否需要登录拦截 public @interface NeedLogin { //是否需要登录拦截,... -
Java通过自定义注解实现拦截类及其内部所有方法
2020-09-23 11:21:06Java通过自定义注解实现拦截类及其内部所有方法 SpringBoot项目自定义注解实现拦截类及其内部方法 1.引入AOP依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&... -
AspectJ 基于自定义的方法注解来拦截方法
2021-03-09 15:39:53通常在使用 AspectJ 时都是基于识别方法的规则来进行方法拦截,例如切片里这样写@Pointcut("execution(* *..StockService....而我这里要说的一种方式是基于自定义注解来拦截方法的,此处的注解不是指 @Aspect, @... -
Java小白开发之使用(注解+拦截器)实现接口版本校验
2021-10-25 11:58:40最近公司给我提了一个需求:实现接口的版本校验 文章目录 最近公司给我提了一个需求:实现接口的版本校验 前言 思路 一、创建注解 二、拦截器中的拦截逻辑 三、创建config类让自定义的拦截器生效 四、开始测试 1、... -
SpringBoot使用自定义注解实现权限拦截的示例
2021-03-17 22:06:46本文介绍了SpringBoot使用自定义注解实现权限拦截的示例,分享给大家,具体如下:HandlerInterceptor(处理器拦截器)常见使用场景日志记录: 记录请求信息的日志, 以便进行信息监控, 信息统计, 计算PV(page View)等... -
手把手教你使用Java注解配合过滤器实现权限控制(超级简单)
2021-03-09 15:40:19Java注解: 定义一个注解: package com.mlb.filter; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.... -
Java自定义注解@interface配合拦截器Interceptor的使用
2021-09-01 09:14:29此文章可对自定义注解与拦截器进行综合学习,讲解简洁明了 步骤一:创建自定义注解 @TestDefinition (自定义注解我个人一般用来做标记使用,为了体现它的“属性作用”,此处仅加一个属性“value”) import ... -
拦截注解修改注解属性
2021-09-01 23:22:11自定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Created by krun on ... -
【java】使用注解加ASPECT实现拦截方法打印方法日志
2020-06-01 22:58:29为了熟悉AOP中的ASPECTJ的使用,为了方便我们...import java.lang.annotation.*; /** * @author wangxiao * @date 2020-05-26 10:38 */ @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD }) @... -
Spring实现自定义注解并且配置拦截器进行拦截
2021-03-09 15:39:29有时候我们会自定义注解,并且需要配置拦截器对请求方法含有该自定义注解的方法进行拦截操作自定义注解类NeedToken.javaimportjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.... -
Java自定义注解 和 springMVC拦截器 配合使用记录系统操作日志的案例
2017-05-26 16:01:19自定义注解的用法, 好多人不知道, 在这里, 代码的注释中, 我已经详细的介绍了, 另外就是很多人不知道自定义注解如何使用, 这里配合springMVC拦截器, 做一个非常实用的案例. 案例: 记录系统操作的日志 首先是定义... -
spring自定义注解实现拦截器的实现方法
2021-03-09 15:39:48类似用户权限的需求,有些操作需要登录...这里可以采用一种比较简单灵活的方式,是采用spring 的 methodInterceptor拦截器完成的,并且是基于注解的。大概是用法是这样的:@LoginRequired@RequestMapping(value = "/... -
Java拦截器+注解搭配使用
2021-03-15 01:06:20拦截器加注解可以实现登录权限验证等操作,我的应用场景也是为了验证这个,下面是简单的实现步骤一、什么是拦截器?拦截器是对action的一种拦截,可以在请求前后进行一些处理可拦截controller和view内容二、Spring中... -
JAVA自定义注解+AOP拦截器的使用
2020-07-30 11:26:221.场景:假如我要拦截有些url请求,但是没有规定在哪个包哪个类下,这时就可用自定义注解+aop拦截。 2.使用-自定义注解: a.首先创建一个自定义注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.... -
Java实现拦截HTTP请求的几种方式
2021-03-10 07:25:57在Java的服务端开发当中,拦截器是很常见的业务场景,这里对Java开发当中几种常见的拦截器的实现方式进行记录和分析。案例说明基于Spring Boot环境。一:实现javax.servlet.Filter接口(使用过滤器方式拦截请求)... -
Java在拦截器获取类上的注解和方法上的注解
2021-01-13 17:33:35话不多说,先看拦截器 public class LoginInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) ... -
Java 登录拦截器
2019-10-31 14:51:30对于Java中拦截器我也是一知半解,但是可以实现,大家可以借鉴 首先 需要添加一个文件与启动器同级 package com.example.demo.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.... -
springmvc里使用注解进行拦截器配置
2021-04-18 01:09:19springmvc本身不能像struts2那样使用注解拦截action,这在使用中非常不方便,我们来扩展下springmvc,增加一个类,就可以实现注解拦截器.首先把下面这个类拷贝进去:package interceptor;import java.lang.annotation....