登录 
欢迎来到陈冬冬(雪地里走)的学习天地 | 经验分享整理平台 | 陈冬冬
 服务器本次启动于:8天前 

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

2019-08-03 20:42:13 阅读:()

用户认证主要是对用户的有效性进行验证,将含有用户、角色、权限信息等参数进行验证,本篇文章将带你一起走起来一个用户授权认证的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

 



你可能感兴趣的:
      关键字:logger(7)shiro(6)chendd(5)loginsubject(5)realm(4)
      互动()
      评论()
      比起点赞,站长更喜欢登录后的评论
      • 0
      • 0
      • 0
      • 0
      • 0