From:http://lighter.iteye.com
下面看一下利用spring AOP做的管理权限简单实例;
首先定义一个用户:
代码
- public class User {
- private String username;
-
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
<script>render_code();</script>
用户有三种人:未注册用户,注册用户,与管理员
注册用户可以可以发表,回复帖子
管理员除了可以发表,回复帖子,还可以删除帖子!
下面定义TestCommunity接口:
代码
- public interface TestCommunity {
- public void answerTopic();
- public void deleteTopic();
- }
<script>render_code();</script>
实现上面接口的TestCommunityImpl类:
代码
- public class TestCommunityImpl implements TestCommunity {
-
- public void answerTopic() {
- System.out.println("可以发表,回复帖子");
- }
-
- public void deleteTopic() {
- System.out.println("可以删除帖子!");
- }
- }
<script>render_code();</script>
下一步,建立一下依赖注入的实现类TestResultImpl:
代码
- public class TestResultImpl {
- private TestCommunity test;
-
- public void setTest(TestCommunity test) {
- this.test = test;
- }
- public void answerTopic()
- {
- test.answerTopic();
- }
- public void deleteTopic()
- {
- test.deleteTopic();
- }
- }
<script>render_code();</script>
接下来,就是最重要的一个类,拦截器,Around处理类型的,类TestAuthorityInterceptor:
代码
- import org.aopalliance.intercept.MethodInterceptor;
- import org.aopalliance.intercept.MethodInvocation;
-
-
- public class TestAuthorityInterceptor implements MethodInterceptor {
- private User user;
-
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
-
-
- public Object invoke(MethodInvocation invocation) throws Throwable {
- String methodName = invocation.getMethod().getName();
-
- if (user.getUsername().equals("unRegistedUser")) {
- System.out.println("你的身份是未注册用户,没有权限回复,删除帖子!");
- return null;
- }
- if ((user.getUsername().equals("user"))
- && (methodName.equals("deleteTopic"))) {
- System.out.println("你的身份是注册用户,没有权限删除帖子");
- return null;
- }
-
- return invocation.proceed();
- }
-
- }
<script>render_code();</script>
配置文件:
代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="authTarget" class="org.test.lighter.TestCommunityImpl" />
-
-
- <bean id="user" class="org.test.lighter.User">
- <property name="username" value="user" />
- </bean>
-
-
- <bean id="TestAuthorityInterceptor"
- class="org.test.lighter.TestAuthorityInterceptor">
- <property name="user" ref="user" />
- </bean>
-
-
- <bean id="service"
- class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="proxyInterfaces">
- <value>org.test.lighter.TestCommunity</value>
- </property>
- <property name="target" ref="authTarget"/>
- <property name="interceptorNames">
- <list>
- <value>TestAuthorityInterceptor</value>
- </list>
- </property>
- </bean>
-
- <bean id="testResult" class="org.test.lighter.TestResultImpl">
- <property name="test" ref="service" />
- </bean>
- </beans>
<script>render_code();</script>
再写一个执行文件BeanTest:
代码
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
-
- public class BeanTest {
- public static void main(String[] args) throws Exception
- {
- ApplicationContext ctx = new FileSystemXmlApplicationContext("src/bean.xml");
- TestResultImpl test = (TestResultImpl)ctx.getBean("testResult");
- test.answerTopic();
- test.deleteTopic();
- }
- }
<script>render_code();</script>
执行结果:大家猜一下啦
代码
- 1、如果是管理员,打印出:
- 可以发表,回复帖子
- 可以删除帖子!
-
- 2、如果是注册用户:
- 可以发表,回复帖子
- 你的身份是注册用户,没有权限删除帖子
-
- 3、未注册用户:
- 你的身份是未注册用户,没有权限回复,删除帖子!
<script>render_code();</script>
分享到:
相关推荐
aop权限管理实例真实项目完整实例,有完整代码和配置及说明,spring版本是2.5,有需要的可以下载。上传只为分享
该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入...
依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、Spring (1)基本概念 Spring是一个开源开发框架...
依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、Spring (1)基本概念 Spring是一个开源开发框架...
依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、Spring (1)基本概念 Spring是一个开源开发框架...
依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、Spring (1)基本概念 Spring是一个开源开发框架...
系统架构是现在主流的SSH架构模式,使用了Spring的Ioc来实现组件之间的依赖关系注入,使用Spring的AOP编程实现权限控制、日志服务等与业务无关的系统服务,以及Struts的action、form、Jsp页面的结构架构的整合如下:...
管理员对系统模块的操作权限认证,有主要有三种方法: 1.在每个需要认证的模块前面插入一段验证码. 2.使用AOP或拦截器. 3.使用代理设计模式. 第一种方法,太笨. 第二种方法,在struts中不易实现,因为Strust的Action...
325 18.4.2 配置数据库连接池 327 18.5 HQL简介 328 18.6 小结 330 第19章 权限管理系统(Struts+Spring+Hiberante+Ajax) 331 19.1 需求分析 331 19.2 系统总体流程设计 331 19.3 系统设计 332 19.4 系统总体解析 ...
BPMX3提供了基于BPMN2标准的流程管理,包括流程版本变量,流程节点表单设置,表单的权限设置,流程任务通知,催办,代办,转化,并行会签、串行会签、补签,子流程,同步任务,多实例任务,人工任务、消息任务、邮件...
1. Springmvc + Mybatis集成、SpringSecurity权限控制、Spring AOP事务处理。 2. Wink Rest服务、Webservice服务:jaxws、CXF等 3. IO 流上传下载文件,多线程操作 4. 发送邮件,配置邮件服务器,发基于html、纯...
Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...
{1.11}简单算法}{38}{section.1.11} {1.11.1}打乱算法}{38}{subsection.1.11.1} {1.11.2}排序算法}{38}{subsection.1.11.2} {1.11.2.1}选择排序}{38}{subsubsection.1.11.2.1} {1.11.2.2}冒泡排序}{39}{...