1.新建一个Java普通工程,并需导入spring-aop.jar包;
2.建UserInfo类:
package aop.secure;
public class UserInfo {
private String userName;
private String password;
public UserInfo(String userName, String password){
this.userName = userName;
this.password = password;
}
public String getPassword() {
return password;
}
public String getUserName() {
return userName;
}
}
3.建安全信息提示类SecureBean:
package aop.secure;
public class SecureBean {
public void writeSecureMessage(){
System.out.println("Every time I learn something new and it pushes some old stuff out of my brain.");
}
}
4.建切面类SecurityAdvice实现org.springframework.aop.MethodBeforeAdvice:
package aop.secure;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class SecurityAdvice implements MethodBeforeAdvice {
private SecurityManager securityManager;
public SecurityAdvice(){
this.securityManager = new SecurityManager();
}
public void before(Method method, Object[] args, Object target) throws Throwable {
UserInfo user = securityManager.getLoggedOnUser();
if(user == null){
System.out.println("No user authenticated.");
throw new SecurityException("Method name: " + method.getName());
}else if("chigo".equals(user.getUserName()) && "chigo".equals(user.getPassword())){
System.out.println("OKAY!");
}else{
System.out.println("Logged in user is: " + user.getUserName());
throw new SecurityException("User " + user.getUserName() + " is not allowed access to method " + method.getName());
}
}
}
5.建登陆与注销管理类SecurityManager:
package aop.secure;
public class SecurityManager {
private static ThreadLocal local = new ThreadLocal();
public void login(String userName, String password){
local.set(new UserInfo(userName,password));
}
public void logout(){
local.set(null);
}
public UserInfo getLoggedOnUser(){
return (UserInfo)local.get();
}
}
6.最后建测试类SecurityExample:
package aop.secure;
import org.springframework.aop.framework.ProxyFactory;
public class SecurityExample {
private static SecureBean getSecureBean(){
SecureBean sbean = new SecureBean();
SecurityAdvice sadvice = new SecurityAdvice();
ProxyFactory pf = new ProxyFactory();
pf.setTarget(sbean);
pf.addAdvice(sadvice);
SecureBean factory = (SecureBean)pf.getProxy();
return factory;
}
public static void main(String[] args) {
SecurityManager mgr = new SecurityManager();
SecureBean sbean = getSecureBean();
mgr.login("chigo","chigo");
sbean.writeSecureMessage();
mgr.logout();
try{
mgr.login("kkk","");
sbean.writeSecureMessage();
}catch(SecurityException ex){
System.out.println("Exception caught: " + ex.getMessage());
}finally{
mgr.logout();
}
try{
sbean.writeSecureMessage();
}catch(SecurityException ex){
System.out.println("Exception caught: " + ex.getMessage());
}
}
}
分享到:
相关推荐
在本文中,我们将重点探讨如何使用Spring AOP实现用户权限验证。 首先,权限验证是任何应用程序中不可或缺的一部分,尤其是涉及到用户登录和访问控制的场景。通过Spring AOP,我们可以将权限验证的逻辑与业务代码...
3. `Test`包:测试类,用于验证权限验证功能是否正常工作。 4. `pom.xml`:Maven配置文件,确保项目依赖正确,包括Spring AOP和其他相关库。 5. `applicationContext.xml`或`@Configuration`类:Spring配置文件,...
- **权限校验**:在方法执行前进行用户权限验证,确保安全。 5. **源码解析** - Spring AOP的实现涉及到反射、动态代理、代理模式等多个核心Java技术。 - `org.springframework.aop.framework.ProxyFactoryBean`...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,用于实现诸如日志记录、性能监控、事务管理以及,如题目所述,权限控制等跨功能关注点。本篇文章将深入探讨如何利用Spring AOP来实现权限管理,以及相关的...
通过切面,可以实现细粒度的权限检查,如验证用户权限是否允许访问特定资源。 3.4 性能监控 在关键方法的切点上应用通知,可以收集性能指标,帮助优化系统性能。 四、实现方式 4.1 注解驱动的AOP 使用`@Aspect`...
- 安全控制:检查用户权限,确保只有授权用户才能访问特定资源。 - 性能监控:在关键方法周围添加计时器,以跟踪性能瓶颈。 - 事务管理:确保数据库操作在正确的情况下提交或回滚,无需在业务代码中显式处理。 6...
- 测试类:用来验证AOP功能是否正确工作。 通过运行这个项目,你可以看到AOP如何在实际场景中工作,如何通过切面和通知来增强业务逻辑。 总的来说,Spring AOP提供了一种灵活的方式,让我们可以在不侵入核心业务...
在Web项目中,Spring AOP通常用于处理跨多个控制器和业务层方法的通用任务,如记录请求日志、验证权限、事务管理等。通过配置或注解,你可以确保这些逻辑在每次相关方法执行时自动触发,从而提高代码的可读性和可...
3. 安全性检查:在方法执行前验证用户权限。 4. 性能监控:计算方法的执行时间,分析系统性能瓶颈。 压缩包中的"aop"文件可能是包含这些示例代码的目录,其中可能有Java源代码文件、配置文件以及测试类。测试代码...
在这个整合实例中,Spring Security可能会配置用户登录、权限控制和URL访问过滤,以确保只有授权的用户能访问特定资源。 4. Hibernate:Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的...
Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它扩展了传统的面向对象编程(OOP),使得开发者能够更好地处理系统中的横切关注点,如日志、事务管理、权限控制等。...
- 安全控制:验证用户权限,限制访问。 - 错误处理:捕获并处理运行时异常。 综上所述,Spring 2.5 AOP例子展示了如何利用类扫描和XML配置实现面向切面编程。通过理解这些概念和实践,我们可以更高效地管理和维护...
综上所述,"aop 权限验证demo"提供了一个利用Spring AOP进行权限控制的实例,它展示了如何在不修改业务代码的情况下,通过切面来插入权限检查,提高了代码的整洁性和安全性。通过对不同类型的AOP通知的理解和实践,...
在Spring框架中,AOP用于处理系统中的横切关注点,比如日志记录、事务管理、权限验证等,这些功能往往需要在多个类或方法中重复实现。通过AOP,我们可以把这些通用的功能模块化,然后在需要的地方进行“织入”,提高...
在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验等横切关注点问题,以提高代码的复用性和可维护性。 XML配置是Spring AOP早期的主要实现方式,虽然现在有更简洁的注解式配置,但理解XML配置...
4. **安全控制**:验证用户权限,防止非法访问。 5. **异常处理**:全局异常捕获和处理,提供统一的错误反馈。 **Aspect概念** 在Spring AOP中,Aspect是核心概念,它封装了横切关注点,即那些跨越多个对象的业务...
在实际开发中,Spring AOP的应用场景广泛,比如记录日志、事务管理、权限验证等。通过使用Spring AOP,开发者可以专注于业务逻辑,而将这些常见的系统服务抽象出来,提高代码的可维护性和复用性。 总之,Spring AOP...
总的来说,基于Spring AOP的权限管理系统原型展示了如何利用AOP的`MethodInterceptor`来实现细粒度的权限控制,将权限验证逻辑与业务逻辑分离,使得代码更加模块化和可维护。同时,这种方式也允许我们在不修改业务...