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

Shiro最佳实践(三)基于ini配置文件认证

2019-08-03 22:07:24 阅读:()

其实在Shiro的多种认证方式中还包含有JdbcRealm的方式,其实现是根据username从数据库中查询用户密码信息、角色信息、权限信息,包括有用户密码的盐值加密,具体实现这里将不再给出了,需要提供DataSource、数据库表、数据等信息。

本篇文章实现使用ini类型的配置文件实现一个简单授权认证,所谓的ini类型文件我们也常有见到,如eclipse.ini、my.ini等,它是一种可按分组读取的键值对文件,比如shiro的用户账户信息约定采用user.前缀命名,那么在ini文件中则无需遵循,直接定义一个[user]组即可,在这个组内的参数可以根据组为前缀获取。

本篇文章将出多个认证的实现,所以将代码进行了抽象,保留了Realm部分的自定义实现,参考如下:

package cn.chendd.shiro.examples.login;

import ...

public abstract class LoginTest {

   
protected Logger logger = LoggerFactory.getLogger(this.getClass());
   
protected String username = "chendd";
   
protected String password = "www.chendd.cn";
   
protected Subject loginSubject;

   
public void testLogin(Realm realm) {
        SecurityManager securityManager =
new DefaultSecurityManager(realm);
        SecurityUtils.setSecurityManager(securityManager);
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token =
new UsernamePasswordToken(username, password);
       
try {
           
loginSubject = securityManager.login(subject, token);
           
if (loginSubject.isAuthenticated()) {
               
logger.debug("用户已经认证");
            }
           
logger.info("用户名 {} 认证成功", loginSubject.getPrincipal());
        }
catch (AuthenticationException e) {
           
logger.error("用户名 {} 认证失败", username, e);
        }

    }

}

package cn.chendd.shiro.examples.login;

import ...

/**
 * @author chendd
 *
测试根据用户名与密码认证登录
 
*/
public class LoginUserTest extends LoginTest {

   
@Test
   
public void testLoginUser() {
       
logger.info("###测试登录----用户名 {} ,密码 {} ###" , username , password);
        String resourcePath =
"classpath:shiro/shiro-loginUser.ini";
        Realm realm =
new IniRealm(resourcePath);
       
super.testLogin(realm);//使用Ini配置文件读取参数的方式认证用户

   
}

}

配置文件

#按用户名与密码登录
[users]
chendd=www.chendd.cn

 运行结果

image.png

 


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