>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28498 个阅读者 刷新本主题
 * 贴子主题:  Spring的方法拦截器范例 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-11-11 08:19:08     消息  查看  搜索  好友  邮件  复制  引用

使用到spring方法拦截器 MethodInterceptor实现权限控制,MethodInterceptor可以使用通配符,并且是基于注解的。

简单例子代码如下:

1、定义需要拦截的类

public class LoginAction{  
    
    //没有权限限制  
    @RequestMapping(value = "/login")  
    public void login(HttpServletRequest req, HttpServletResponse res) {  
           //登录功能.  
   }  
  
   //需要登录完成后才可访问  
   @LoginMethod  
   @RequestMapping(value = "/userList")  
    public void userList(HttpServletRequest req, HttpServletResponse res) {  
           //获取用户列表  
   }  
  
}  

注意上面的@LoginMethod是我自定义的注解



2、定义LoginMethod注解


@Target(ElementType.METHOD)   //方法
@Retention(RetentionPolicy.RUNTIME)    // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
public @interface LoginMethod {  
    
}  

3、定义MethodInterceptor拦截器


public class SystemMethodInterceptor implements MethodInterceptor {  
    @Override  
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {        
        Method method = methodInvocation.getMethod();    
        if(method.isAnnotationPresent(LoginMethod.class)){//加了@LoginMethod注解,被拦截  
             User user = sessionUtil.getCurrUser();  
             if(user == null){//未登录  
                 //proceed方法不调用,方法被拦截  
                 return null;  
             }else{  
                 return methodInvocation.proceed();//该方法不调用,则被拦截的方法不会被执行  
             }  
        }else{  
            return methodInvocation.proceed();  
        }  
    }  
}  

4、配置文


<bean id="systemMethodInterceptor" class="com.tzz.interceptor.SystemMethodInterceptor" >  
</bean>  
<aop:config>  
<!--切入点-->  
<aop:pointcut id="methodPoint" expression="execution(* com.tzz.controllor.web.*.*(..)) "/><!--在该切入点使用自定义拦截器-->  
<aop:advisor pointcut-ref="methodPoint" advice-ref="systemMethodInterceptor"/>  
</aop:config>

程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Swing组件(下)
  JavaWeb开发-->对象的生命周期
  JSP与Hibernate开发-->JSP技术详解(Ⅰ)
  Java网络编程-->Web运作原理(Ⅲ)
  精通Spring-->通过JPA API检索数据
  Vue3开发-->映射组成关系
  推荐一本微服务开发经典书籍《Spring Cloud Alibaba微服务开...
  VSCode插件的高级用法
  阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!
  重新理解响应式编程
  Spring MVC记录日志的三种方式
  在Spring MVC中配置线程池,进行异步请求处理
  聊聊Spring Cloud版本的那些事儿
  从零搭建一个基于 ELK 的日志、指标收集与监控系统
  理解 RESTful 风格的 API
  微服务架构的优点和缺点
  网红框架SpringBoot2.x之定制参数浅析
  一睹Web服务真面目,有商业价值的Web服务是这样的
  spring-boot-plus V1.4.0发布 集成用户角色权限部门管理 - g...
  mybatis-plus 注解实现多表关联查询的最佳实践
  Spring Boot整合WebSocket及Spring Security实例
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 gywfind 
  
威望: 0
级别: 新手上路
魅力: 145
经验: 145
现金: 1068
发文章数: 10
注册时间: 0001-01-01
 消息  查看  搜索  好友  邮件  复制  引用


位分析目前是技术分析型彩民经常使用的中高端技术手段,因为它具有非常具体的指向性
澳洲幸运20福彩双色球幸运飞艇
发文章时间 2024-11-11 08:19:08
 IPIP: 已设置保密 1 楼     
1页 2条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。