Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 6470|回复: 0

关于springmvc 方法注解拦截器的解决方案,多用于方法的鉴权

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-13 17:09:02 | 显示全部楼层 |阅读模式

    最近在用SpringMvc写项目的时候,遇到一个问题,就是方法的鉴权问题,这个问题弄了一天了终于解决了,下面看下解决方法

     

    项目需求:需要鉴权的地方,我只需要打个标签即可,比如只有用户登录才可以进行的操作,一般情况下我们会在执行方法时先对用户的身份进项校验,这样无形中增加了非常大的工作量,重复造轮子,有了java注解只需要在需要鉴权的方法上面打个标签即可:

    解决方案

      1、首先创建一个注解类:

    1 @Documented
    2 @Inherited
    3 @Target({ElementType.METHOD,ElementType.TYPE})
    4 @Retention(RetentionPolicy.RUNTIME)
    5 public @interface Auth {
    6     boolean validate() default true;
    7 }

      2、再创建一个拦截器:

      

     1 public class AuthInterceptor extends BaseInterceptor{
     2 
     3     @Override
     4     public boolean preHandle(HttpServletRequest request,
     5             HttpServletResponse response, Object handler) throws Exception {
     6         if(handler.getClass().isAssignableFrom(HandlerMethod.class)){
     7             Auth authPassport = ((HandlerMethod) handler).getMethodAnnotation(Auth.class);
     8             
     9             //没有声明需要权限,或者声明不验证权限
    10             if(authPassport==null){
    11                 return true;
    12             }else{                
    13                 //在这里实现自己的权限验证逻辑
    14                 if(true){//如果验证成功返回true(这里直接写false来模拟验证失败的处理)
    15                     System.out.println("执行权限校验了");
    16                     return true;
    17                 }else{//如果验证失败
    18                     //返回到登录界面
    19 //                    System.out.println("权限校验对了");
    20 //                    response.sendRedirect("account/login");
    21                     return false;
    22                 }       
    23             }
    24         }else{
    25             return true;
    26         }
    27     }
    28 
    29 }

      3、配置拦截器:需要在*-servlet.xml里面增加以下代码,如果您自定义了配置文件也可直接放到您定义的配置文件中

      

    1     <mvc:interceptors>
    2         <bean class="com.benxq.shop.user.interceptors.AuthInterceptor"/>
    3     </mvc:interceptors>

      注意:需要将默认的改为RequestMappingHandlerMapping,增加RequestMappingHandlerAdapter的bean

     

      重新启动tomcat即可,

      温馨提示:如果对方法需要鉴权只需要在方法上面打上@Auth,如果对类的所有方法需要鉴权,只需要在类上面打上@Auth即可。

      

      那么问题来了,方法拦截器会吧静态资源一块拦截,我们需要在tomcat中进行对静态文件进行拦截如:我的解决方法是在web.xml进行配置,大家有好的方法也可以加我扣扣752432995一块探讨

      

    1 <servlet-mapping>
    2       <servlet-name>default</servlet-name>
    3       <url-pattern>*.jpg</url-pattern>
    4   </servlet-mapping>
    5   <servlet-mapping>
    6       <servlet-name>default</servlet-name>
    7       <url-pattern>*.png</url-pattern>
    8   </servlet-mapping>

     

      

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-5 20:48 , Processed in 0.059011 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表