一、spring boot项目,使用@Configuration注入WebMvcConfigurer来实现拦截器

如:

@Configuration

public class HighersoftWebMvcConfig implements WebMvcConfigurer{

@Autowired

private AdminHandlerInterceptorAdapter adminHandlerInterceptorAdapter;

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(adminHandlerInterceptorAdapter).addPathPatterns("/**");

//.excludePathPatterns("/swagger-resources/**", "/webjars/**");

}

}注意,spring boot项目Configuration才会生效。

拦截器的实现:

@Component

public class AdminHandlerInterceptorAdapter extends HandlerInterceptorAdapter {

@Autowired

private AdminService userService;

@Override

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

if (handler instanceof HandlerMethod) {

final HandlerMethod handlerMethod = (HandlerMethod) handler;

final Class> clazz = handlerMethod.getBeanType();

final Method method = handlerMethod.getMethod();

if (clazz.isAnnotationPresent(ExcludeLoginVerify.class) || method.isAnnotationPresent(ExcludeLoginVerify.class)) {

return true;

}

if(!loginContextVerification(request)) {

throw new RuntimeException("亲,登录了才能操作呢。");

}

return true;

}

return true;

}

}二、如果不是spring boot,用的是spring mvc,那么也可用上面的拦截器。用以下xml来实现:

三、用spring的aop也可以实现:

如:

@Component

public class LoginContextAspect {

private static final Logger logger = LoggerFactory.getLogger(LoginContextAspect.class);

@Autowired

UserService userService;

@Autowired

CookieUtils cookieUtils;

@Pointcut("execution(* net.highersoft.xx.controller..*(..)) && && !@annotation(net.highersoft.xx.annotation.ExcludeLoginVerify)")

public void controllerMethodPointcut() {

}

/**

* 拦截器具体实现

*

* @param pjp

* @return JsonResult(被拦截方法的执行结果,或需要登录的错误提示。)

*/

@Around("controllerMethodPointcut()")

public Object Interceptor(ProceedingJoinPoint pjp) {

Object result = null;

Object[] args = pjp.getArgs();

for (Object arg : args) {

if (arg instanceof HttpServletRequest) {

HttpServletRequest request = (HttpServletRequest) arg;

//验证逻辑

if (!loginContextVerification(request)) {

result = new JsonResult(ResultCode.LOGINCONTEXT_ERROR, "登录状态验证错误,请重新登录!", null);

}

}

}

try {

if (result == null) {

// 一切正常的情况下,继续执行被拦截的方法

result = pjp.proceed();

}

} catch (Throwable e) {

logger.info("LoginContextAspect >> exception: ", e);

result = new JsonResult(ResultCode.ERROR, ResultMsg.ERROR);

}

return result;

}

private boolean loginContextVerification(HttpServletRequest request) {

String token = cookieUtils.getCookieValue(request, "token");

if (!StringUtils.isNullOrEmpty(token)) {

try {

Object user = userService.get(token);

if (user != null) {

UserInfo u = JSONObject.parseObject(user.toString(), UserInfo.class);

return true;

}

} catch (JedisException ex) {

logger.error(ex.getMessage());

}

}

return false;

}

}四、用javax.servlet.Filter也可以实现,老项目可能用的是这个。

如在web.xml加入:

urlFilter

net.highersoft.mstats.filter.UrlFilter

urlFilter

/*

那么url-pattern下的访问都要过Filter,这样也可以控制权限。

五,其它方式

shiro 可以控制得更细,但代码也多些。

struts 也可以配置拦截器,但很久没用了,没代码了。

java web常用权限方式,java web项目的几种权限控制方法相关推荐

  1. java开发常用技术,java项目经验面试

    前言 关于技术人如何成长的问题,一直以来都备受关注,因为程序员职业发展很快,即使是相同起点的人,经过几年的工作或学习,会迅速拉开极大的差距,所以技术人保持学习,提升自己,才能够扛得住不断上赶的后浪,也 ...

  2. java多线程的实现方式_JAVA多线程实现的三种方式

    最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用E ...

  3. java实现线程的方式_java多线程实现的四种方式

    java多线程实现的四种方式1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口) 2.实现Runnable接口,重写run方法 3.实现Callable接口,重 ...

  4. java数组初始化的方式,java中初始化数组的方式有几种

    java中初始化数组的方式有几种 发布时间:2020-06-01 16:12:45 来源:亿速云 阅读:153 作者:鸽子 三种初始化方式: 1.静态初始化:创建+赋值 2.动态初始化:先创建再赋值 ...

  5. java创建数组的方式_Java创建数组的几种方式总结

    1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...

  6. Spring MVC之基于java config无xml配置的web应用构建

    更多spring相关博文参考: spring.hhui.top 前一篇博文讲了SpringMVC+web.xml的方式创建web应用,用过SpringBoot的童鞋都知道,早就没有xml什么事情了,其 ...

  7. 1.1.3 以Self Host方式寄宿Web API

    寄宿Web API不一定需要IIS的支持,我们可以采用Self Host的方式使用任意类型的应用程序(控制台.Windows Forms应用.WPF)作为宿主. 对于SelfHost这样一个空的控制台 ...

  8. 【Java中常用的集合类】

    1.Java中集合框架图 2.List 和 Set 的区别? List , Set 都是继承自Collection 接口 List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重 ...

  9. Java开发常用包、接口和类

    一.JDK中常用包 1.java.lang 这个是系统的基础类: 2.java.io 这里面是所有输入输出有关的类,比如文件操作等: 3.java.nio 为了完善 io 包中的功能,提高 io 包中 ...

最新文章

  1. mariadb 内存占用优化
  2. Python深度学习之分类模型示例,MNIST数据集手写数字识别
  3. 网络对抗技术_实验二_网络嗅探与欺骗
  4. java 加减运算_JAVA日期加减运算 | 学步园
  5. 云闪付单个红包最高2018,这是要打败支付宝的节奏吗?
  6. linux find查找文件然后删除,linu查找find命令及删除7天前的文件
  7. iOS中Runtime简析
  8. Uber新CEO的第一把火:停止运营Xchange Leasing租车业务
  9. 高并发系统数据幂等性
  10. 初学者 | 分词的那些事儿
  11. ca 手机抓包_手机 https 抓包---Charles篇
  12. PC微信小程序突然Charles抓不到包
  13. Ghost XP SP2 64位 纯净珍藏版
  14. 将数字转为ASCII码
  15. 深入理解计算机系统03——程序的机器级表示
  16. 三,python基础初识。
  17. 你知道国内有哪些网站提供免费的云服务器吗
  18. Tektronix泰克MDO3054示波器
  19. IDEA Android开发 连接华为手机调试
  20. Apache web服务器目录结构、发布网站

热门文章

  1. 基于深度学习的花卉图像关键点检测
  2. 这三所985,博士生毕业,不再要求发表论文!
  3. 统计学和机器学习到底有什么区别?
  4. 基于OpenCV的区域分割、轮廓检测和阈值处理
  5. 基础知识——列表简介(二)
  6. 教学思路SQL之入门习题《学员成绩》 一、建表
  7. C程序演示产生僵死进程的过程
  8. PAT (Advanced Level) 1078. Hashing (25)
  9. 64位ubuntu安装WPS
  10. Heartbeat双机热备配置