初识shiro

xiaoxiao2021-02-28  40

初识shiro

一、什么是shiro

Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 

认证 - 用户身份识别,常被称为用户“登录”;授权 - 访问控制;密码加密 - 保护或隐藏数据防止被偷窥;会话管理 - 每用户相关的时间敏感的状态。

对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro要简单的多。 

详情请参考:https://blog.csdn.net/xiaoliuliu2050/article/details/54911480

二、javase下的环境搭建

  步骤一:新建java项目并导入相关jar包

       shiro-all-1.2.3.jar       slf4j-api-1.7.25.jar       slf4j-log4j12-1.7.25.jar       log4j-1.2.14.jar

  步骤二:在src目录下添加log4j.properties配置文件及shiro.ini文件(log4j用来打印相关日志信息,shiro.ini用做数据源)

   log4j.properties配置文件参考

log4j.rootLogger = debug,stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern =[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n  shiro.ini文件参考 [users] #admin的密码是111111,此用户具有role1、role2两个角色 admin=111111,role1,role2 zhangsan=222222,role2 [roles] #角色role1对用户有create、update权限 role1=user:create,user:update #角色role2对用户有create、delete权限 role2=user:create,user:delete #角色role3对用户有create权限 role3=user:create

步骤三:编写代码进行测试

package com.shiro.test; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.util.Factory; import org.slf4j.Logger; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.slf4j.LoggerFactory; public class Test { private static final Logger log=LoggerFactory.getLogger(Test.class); public static void main(String[] args) { log.info("开始测试Log------"); //1.获取securityManager工厂 Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini"); //2.创建安全管理器(SecurityManagers)实例,并将安全管理器与SecurityUitls绑定 SecurityManager manager=factory.getInstance(); SecurityUtils.setSecurityManager(manager); //3.通过SecurityUtils获取用户对象(Subject):即将登陆的用户 Subject user=SecurityUtils.getSubject(); //4.创建用户身份凭证(用户名/密码) UsernamePasswordToken token=new UsernamePasswordToken("admin", "111111"); //5.用户未认证时通过token进行认证(登录失败会抛出对应异常) if(!user.isAuthenticated()){//user.isAuthenticated()返回用户认证状态 try { user.login(token); System.out.println("用户认证成功。。。"); } catch (Exception e) { System.out.println("用户认证失败!"); e.printStackTrace(); } } /** * 用户认证失败所抛出的异常 * UnknownAccountException:账号不存在异常 * IncorrectCredentialsException:账号与密码不匹配异常 * */ //判断当前用户是否存在对应角色 log.info(String.valueOf(user.hasRole("role1"))); //判断当前用户是否存在对应权限 log.info(String.valueOf(user.isPermitted("user:create"))); } }

    

转载请注明原文地址: https://www.6miu.com/read-2628027.html

最新回复(0)