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());
}
}
}
分享到:
相关推荐
本篇文章主要介绍了Java之Spring AOP 实现用户权限验证,用户登录、权限管理这些是必不可少的业务逻辑,具有一定的参考价值,有兴趣的可以了解一下。
用spring aop 编写的权限验证实例代码,下载后将解压后的文件直接导入到eclipse中,直接运行测试方法即可。
springAOP指的是在spring中的AOP,什么是AOP,相对于java中的面向对象(oop),在面向对象中一些公共的行为,像日志记录,权限验证等如果都使用面向对象来做,会在每个业务方法中都写上重复的代码,造成代码的冗余。...
主要介绍了SpringBoot使用AOP+注解实现简单的权限验证的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1、区分Authentication(验证)与 Authorization(授权) 验证 这个用户是谁? 用户身份可靠吗?...8、通过数据库验证用户身份 9、完善web页面验证规则 10、自定义验证配置 11、本地化消息输出(国际化)
在web应用中,有些功能是需要用户登录之后才能够使用的。如果web层我们使用的是Struts,那么在执行某些Action的时候,就需要对用户是否登录...利用Spring 的AOP,我们完全可以将验证用户是否登录抽取出来做成“切面”。
Spring Boot-Shiro-Vue 提供一套基于SpringBoot-shiro-vue的权限管理思路. 前后端都加以控制,做到按钮/接口级别的权限 ...角色的作用其实只是用来管理分配权限的,真正的验证只验证权限 ,而不去管你是否是那种角
Spring Boot-Shiro-Vue 提供一套基于SpringBoot-shiro-vue的权限管理思路. 前后端都加以控制,做到按钮/接口级别的权限 DEMO admin/123456 管理员身份...因此如果从角色着手进行权限验证,系统都必须根据用户的配置动起来
这是在做一个物流平台,一批项目:门户网站,配货系统,个人网站,二批,三排请关注我的更新,JAR包可以找我要(qq:438312413),目前只完成登录,权限出步验证(filter,后面会采用spring aop来实现细力度控制,可以...
com-aop注释权限演示
12.2.3使用RequestPostProcessor在Spring MVC测试中以用户身份运行 106 作为用户在Spring MVC测试中使用注释运行 108 12.2.4测试HTTP基本认证 109 12.3 SecurityMockMvcRequestBuilders 109 12.3.1测试基于表单的...
spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5加密 SHA加密(登录密码用此加密) 9. 数据库连接池 阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发 ...
管理系统主页,获取用户具有的权限,显示菜单 角色进行授权,只有超级管理员才具有权限 角色进行配置,可以学习一下RBAC(基于角色的权限控制) 使用JavaEmail插件实现邮件发送,记得需要开启SSl验证 OA管理系统(待...
5.5. Spring Security中的访问控制(验证) 5.5.1. 安全和AOP建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager ...
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入...
采用的是maven管理工程 项目架构是 springmvc4.2.4.RELEASE+spring4.2.4.RELEASE+shiro1.22+hibernate5.1.0.Final 前端框架采用的是bootstrap 实现了角色+权限+用户的控制,另外为了能够更好的查看效果我加了一个实体...
5.5. Spring Security中的访问控制(验证) 5.5.1. 安全和AOP建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager 5.5.2.4...
5.5. Spring Security 中的访问控制(验证) 5.5.1. 安全和AOP 建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager ...
spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5加密 SHA加密(登录密码用此加密) 9. 数据库连接池 阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发 ...