Shiro最佳实践(二)基于properties配置文件认证
Apache Shiroadmin 发布于:2019-08-03 20:42:13
阅读:loading
用户认证主要是对用户的有效性进行验证,将含有用户、角色、权限信息等参数进行验证,本篇文章将带你一起走起来一个用户授权认证的Hello程序,Shiro认证包含有很多种方式,本篇文章采用读取Properties文件参数的方式来向你展示一个Shiro简单授权的过程,包含用户登录、角色、权限验证这些,详见下文。
首先说一下本文这种认证方式为普通Java类的项目使用,通过在Properties文件中配置授权信息来实现,参见org.apache.shiro.realm.text.PropertiesRealm类,参见使用方式截图如下:
#定义用户信息及角色,分别是用户名,密码,角色
user.admin = admin123 , admin
user.chendd = chendd123 , manager
user.tt = tt123 , tester
#定义角色权限
role.manager = "user:read,write","sayHello"
package cn.chendd.shiro.examples;
import ...
@RunWith(JUnit4.class)
public class HelloTest {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
protected String username = "chendd";
protected String password = "chendd123";
@Test
public void testLogin() {
logger.info("###测试登录----用户名 {} ,密码 {} ###" , username , password);
//默认路径为:classpath:shiro-users.properties
PropertiesRealm realm = new PropertiesRealm();
realm.onInit();
SecurityManager securityManager = new DefaultSecurityManager(realm);
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try {
Subject loginSubject = securityManager.login(subject, token);
if (loginSubject.isAuthenticated()) {
logger.info("用户名 {} 认证成功", loginSubject.getPrincipal());
boolean managerRole = loginSubject.hasRole("manager");
logger.info("是否拥有指定角色[manager]:{}" , managerRole);
boolean sayHelloPermitted = loginSubject.isPermitted("sayHello");
logger.info("是否拥有指定权限[sayHello]:{}" , sayHelloPermitted);
}
} catch (AuthenticationException e) {
logger.error("用户名 {} 认证失败", username, e);
throw e;
}
}
}
点赞
发表评论
当前回复:作者