Shiro最佳实践(二)基于properties配置文件认证

Apache Shiro
placeholder image
admin 发布于:2019-08-03 20:42:13
阅读:loading

用户认证主要是对用户的有效性进行验证,将含有用户、角色、权限信息等参数进行验证,本篇文章将带你一起走起来一个用户授权认证的Hello程序,Shiro认证包含有很多种方式,本篇文章采用读取Properties文件参数的方式来向你展示一个Shiro简单授权的过程,包含用户登录、角色、权限验证这些,详见下文。

首先说一下本文这种认证方式为普通Java类的项目使用,通过在Properties文件中配置授权信息来实现,参见org.apache.shiro.realm.text.PropertiesRealm类,参见使用方式截图如下:

image.png

参数配置

#定义用户信息及角色,分别是用户名,密码,角色
user.admin admin123 , admin
user.chendd chendd123  , manager
user.tt tt123 , tester
#定义角色权限
role.manager "user:read,write","sayHello"

Junit代码

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;
        }
    }

}

运行结果

image.png

 点赞


 发表评论

当前回复:作者

 评论列表


留言区