springmvc用于方法鉴权的注解 * 的解决方案代码
作者:老瞿 发布时间:2022-06-02 10:30:18
标签:spring,mvc,鉴权
最近在用SpringMvc写项目的时候,遇到一个问题,就是方法的鉴权问题,这个问题弄了一天了终于解决了,下面看下解决方法
项目需求:需要鉴权的地方,我只需要打个标签即可,比如只有用户登录才可以进行的操作,一般情况下我们会在执行方法时先对用户的身份进项校验,这样无形中增加了非常大的工作量,重复造轮子,有了java注解只需要在需要鉴权的方法上面打个标签即可:
解决方案:
1、首先创建一个注解类:
@Documented
@Inherited
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Auth {
boolean validate() default true;
}
2、再创建一个 * :
public class AuthInterceptor extends BaseInterceptor{
@Override
public Boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if(handler.getClass().isAssignableFrom(HandlerMethod.class)){
Auth authPassport = ((HandlerMethod) handler).getMethodAnnotation(Auth.class);
//没有声明需要权限,或者声明不验证权限
if(authPassport==null){
return true;
} else{
//在这里实现自己的权限验证逻辑
if(true){
//如果验证成功返回true(这里直接写false来模拟验证失败的处理)
System.out.println("执行权限校验了");
return true;
} else{
//如果验证失败
//返回到登录界面
// System.out.println("权限校验对了");
// response.sendRedirect("account/login");
return false;
}
}
} else{
return true;
}
}
}
3、配置 * :需要在*-servlet.xml里面增加以下代码,如果您自定义了配置文件也可直接放到您定义的配置文件中
<mvc:interceptors>
<bean class="com.benxq.shop.user.interceptors.AuthInterceptor"/>
</mvc:interceptors>
注意:需要将默认的改为RequestMappingHandlerMapping,增加RequestMappingHandlerAdapter的bean
重新启动tomcat即可,
温馨提示:如果对方法需要鉴权只需要在方法上面打上@Auth,如果对类的所有方法需要鉴权,只需要在类上面打上@Auth即可。
那么问题来了,方法 * 会吧静态资源一块拦截,我们需要在tomcat中进行对静态文件进行拦截如:我的解决方法是在web.xml进行配置,大家有好的方法也可以加我扣扣752432995一块探讨
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
总结
SpringMVC * 实现单点登录
SpringMVC * 实现监听session是否过期详解
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
来源:http://www.cnblogs.com/quchengfeng/p/4685919.html
0
投稿
猜你喜欢
- C#移除字符串中的不可见Unicode字符 背景最近发现某个数据采集的系统拿下来的数据,有些字段的JSON被莫名截断了,导致后续数
- 1、什么是Mybatis?MyBatis是一个优秀的持久层框架,是一个半ORM(对象关系映射)框架,它对jdbc的操作数据库的过程进行封装,
- 统计输入的行数标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束。因此,统计行数等价于统计换行符的个数。#include <
- Bean的生命周期解释(1)BeanFactoryPostProcessor的postProcessorBeanFactory()方法:若某
- 这个是基于SystemBarTintManager更改的增加一个方法:用于更改MIUIV6系统上的状态栏字体颜色 ,目前我仅仅只发现MIUI
- 本文实例为大家分享了Android实现拼图游戏的具体代码,供大家参考,具体内容如下本人是用 android studio 完成的源码pack
- 1.背景Java语言相比于C和C++,一个最大的特点就是不需要程序员自己手动去申请和释放内存,这一切交由JVM来完成。在Java中,运行时的
- 前言:在android HTML5 开发中有不少人遇到过 audio 标签 autoplay在某些设备上无效的问题,网上大多是讲怎么在js中
- 1.使用matlab作闭合多边形图没有找到直接画多边形的函数,只能是将各个点的坐标保存在数组中,将一个点与其相邻的点相连,并将最后一个点与第
- 异常处理是每个项目中都绕不开的话题,那么如何优雅的处理异常,是本文的话题。本文将结合SpringBoot框架一起和大家探讨下。要思考的问题在
- C# 中的每个类或结构都隐式继承 Object 类。因此,C# 中的每个对象都会获得 ToString 方法,此方法返回该对象的字符串表示形
- 将JavaDoc 注释 生成API文档1. 打开java代码,编写JavaDoc 注释,只有按照java的规范编写注释,才能很好的生成API
- 本文实例讲述了Android基于TextView属性android:ellipsize实现跑马灯效果的方法。分享给大家供大家参考,具体如下:
- 前言表单提交是最常见的数据提交方式,我们经常会填写表单信息,比如用户名,身份证,手机号等等,因此就会产生身份证是否合法,用户名是否为空,虽然
- 使用异步包(推荐)async包由 Dart 编程语言的作者开发和发布。它提供了dart:async风格的实用程序来增强异步计算。可以帮助我们
- AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Servic
- C# 利用代理爬虫网页实现代码:// yanggang@mimvp.com// http://proxy.mimvp.com// 2015-
- 在Android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同;以下我分别列举了Android开发中的不同存储方式的特点一,
- 今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分
- 效果如下:鄙人虽然开发WPF有些时间,但之前一直是一些简单Template和Style改改之类的工作,并没有深入研究过。此次为了完成工作,首