- 浏览: 1053195 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
使用到spring方法拦截器 MethodInterceptor实现权限控制,MethodInterceptor可以使用通配符,并且是基于注解的。
简单例子代码如下:
1、定义需要拦截的类
Java代码 收藏代码
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注解
Java代码 收藏代码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginMethod {
}
3、定义MethodInterceptor拦截器
Java代码 收藏代码
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、配置文
Xml代码 收藏代码
<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>
简单例子代码如下:
1、定义需要拦截的类
Java代码 收藏代码
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注解
Java代码 收藏代码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginMethod {
}
3、定义MethodInterceptor拦截器
Java代码 收藏代码
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、配置文
Xml代码 收藏代码
<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>
发表评论
-
Spring Boot
2017-09-26 09:51 290Spring Boot是由Pivotal团 ... -
spring AOP中切点
2017-08-25 09:59 905在spring AOP中,需要使用AspectJ的切点表达式 ... -
Spring JdbcTemplate详解
2017-07-19 16:12 592JdbcTemplate简介 Spring对数据库的操 ... -
Spring相关
2017-04-20 16:10 457我是一个Java开发者,之前知道Spring属于这个公司,就 ... -
spring.schemas、spring.handlers的使用
2017-02-28 13:55 1722报错信息:Configuration problem: Un ... -
Spring的一个命名空间的名称空间处理程序没有找到
2017-02-25 15:20 9451. 问题 本文将讨论Spring中最常见的配置问题 —— ... -
到底EJB是什么
2016-12-06 10:05 450到底EJB是什么?被口口相传的神神秘秘的,百度一番,总觉得 ... -
Spring MVC 和 Servlet 一样,都不是线程安全的
2016-04-28 01:06 679你的理解是对的,Spring MVC 和 Servlet 一 ... -
springmvc的control 的线程是否安全的问题
2016-05-31 10:09 362关于java Servlet,Struts,springM ... -
框架的一些学习
2016-02-03 14:53 263java aopalliance-1.0.jar这个包是AOP ... -
Metrics介绍和Spring的集成
2016-02-02 16:56 973Metrics可以为你的代码的运行提供无与伦 ... -
spring mvc常用的注解
2016-01-22 14:28 705spring mvc常用的注解: ... -
Spring的常用注解
2016-01-20 16:07 656Spring2.5引入注解式处理器 @Controlle ... -
通过Spring的配置,添加多个数据源,制作多个qlMapClient,iBatis或Hibernate的各个DAO
2016-12-27 10:25 518通过Spring的配置,添加多个数据源,制作多个qlMapCl ... -
springmvc避免IE执行AJAX时,返回JSON出现下载文件
2017-01-01 23:35 864<!-- 避免IE执行AJAX时,返回JSON出现下载文 ... -
springMVC的@ResponseBody出现乱码解决方法
2017-01-02 00:23 380使用@ResponseBody出现乱码解决方法 1、 Re ... -
Spring中的Bean的注入方式
2017-01-02 00:27 539一 setter方法注入 配置文件如下: <bean ... -
spring发送邮件配置文件
2017-01-02 00:27 12751、发送邮件配置文件springmail_config ... -
@Resource和@Autowire的区别
2017-01-02 00:27 701@Resource和@Autowire的区别 在java代码中 ... -
Spring中继承并简化了Quartz
2017-01-02 00:27 672Quartz是一个强大的企业级任务调度框架,Spring中继承 ...
相关推荐
在`intercept`方法中,我们实现了类似Spring拦截器的功能,调用`preHandle`和`postHandle`方法,并根据`preHandle`的结果决定是否执行目标方法。 最后,`afterCompletion`方法的调用通常需要手动管理,因为它涉及到...
接下来,描述中提到了"MethodInterceptor",这是Spring AOP中的一种拦截器,用于拦截并修改代理对象的方法调用。不同于HandlerInterceptor,MethodInterceptor是基于代理的AOP,适用于拦截任何由Spring管理的对象,...
### Spring AOP 四种创建通知(拦截器)类型详解 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块,它提供了在应用代码中添加横切关注点的能力,如日志记录、事务管理、权限...
它定义了一些通用的AOP接口,比如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,使得不同的AOP框架(如Spring和AspectJ)可以共享相同的拦截器(interceptors)。...
Java拦截器(Interceptor)是Java应用开发中一种重要的设计模式,尤其在企业级应用和框架中,如Spring、Struts2、MyBatis等。它主要用于在方法执行前后添加额外的功能,比如日志记录、性能统计、事务管理、权限验证...
- 实现MethodInterceptor:如果需要更细粒度的控制,可以创建一个拦截器,处理事务的开始、提交和回滚。 5. **源码分析**: - 分析`HibernateTransactionManager`的源码可以帮助理解其内部是如何与Hibernate配合...
4. **创建拦截器**:在Spring中,我们可以通过实现`MethodInterceptor`接口或者使用`@Aspect`注解来创建拦截器。`MethodInterceptor`是AOP联盟的一部分,而`@Aspect`是AspectJ的注解,用于定义切面。 5. **配置拦截...
总结起来,Spring Boot结合Spring AOP实现拦截器,主要是通过定义切面类,声明拦截规则(切点),然后编写环绕通知,以在方法执行前后插入自定义的行为,如记录日志、检查权限等。这种做法可以有效地解耦业务逻辑和...
在Spring AOP中,我们通过定义一个实现了`org.springframework.aop.MethodInterceptor`接口的类来创建自定义拦截器。这个类需要实现`invoke`方法,该方法会在目标方法被调用之前和之后执行。 接下来,我们需要将...
总结起来,通过定义一个自定义注解来标记需要拦截的方法,并通过AOP配置来指定拦截器的执行时机和方法,可以灵活地在Spring MVC应用中添加各种前置处理逻辑,而不影响核心业务代码的清晰和专注。这种方式不仅可以...
在Spring框架中,拦截器(Interceptor)是一种强大的工具,它允许我们在方法调用前后执行自定义逻辑。在本文中,我们将探讨如何利用Spring的拦截器实现自定义缓存功能,以便提高应用程序性能并减少对数据库的依赖。...
当没有拦截器链时,Spring会直接执行目标方法。否则,它会创建一个`CglibMethodInvocation`对象,将目标对象、目标方法和拦截器链传递进去,并调用`proceed()`方法来触发拦截器链的执行。 拦截器链的工作原理如下:...
总结来说,Spring AOP的日志拦截通过定义拦截器、切入点和顾问,可以方便地实现对特定方法的透明日志记录。这个示例中的`LogInterceptor.java`实现了具体拦截逻辑,而`config.xml`则负责配置拦截规则,两者结合实现...
3. MethodInterceptor:这是Spring AOP编程式实现的核心接口,它定义了拦截器链的执行逻辑。每个拦截器都可以在方法调用前后执行额外的操作。 ```java public class MyInterceptor implements MethodInterceptor { ...
Spring AOP允许我们定义拦截器(Interceptor),这些拦截器会在目标方法执行前后进行干预。在本例中,我们创建了一个名为`MethodCacheInterceptor`的类,它实现了`MethodInterceptor`接口。这个拦截器的主要任务是在...
- `org.aopalliance.intercept.MethodInterceptor`:这是方法拦截器接口,允许开发者在方法调用前后插入自定义逻辑,如日志、事务处理等。 - `org.aopalliance.intercept.Interceptor`:这是一个更通用的拦截器...
在Spring AOP中,拦截器是`MethodInterceptor`接口的实现,而顾问是`Advisor`接口的实现,包括`PointcutAdvisor`(包含切点和拦截器)和`IntroductionAdvisor`(引入新的接口)。`ProxyFactoryBean`可以通过`...
在Spring AOP(面向切面编程)中,Advise(增强方法)是核心概念之一,它允许我们在不修改原有业务代码的情况下,通过拦截器模式来插入额外的功能或行为。这篇博客文章“Spring Aop Advise方法(增强方法) 中获取目标...
代理对象在执行方法时,会首先调用拦截器,然后才调用实际的目标方法。 三、使用示例 在`springtest`项目中,你可以找到一个简单的例子来演示`BeanNameAutoProxyCreator`的使用。项目中可能包括以下组件: - 一个...