shiro javaSE初步认识

shiro框架理解:

小白一枚哪里理解不对的欢迎大家评论指正,谢谢
这里写图片描述
参照博客:https://blog.csdn.net/liaomin416100569/article/details/78838900
shiro框架提供了认证(登陆),授权,加密,会话管理功能,更容易方便处理,不同用户,角色的权限问题,不依赖容器,javaSE和web环境都可使用.

  • 认证(登陆):识别’用户’身份

  • 授权:登陆后,可以控制不同用户访问不同的资源

  • 加密:将密码加密,使密码更安全

  • 会话管理:提供session会话对象管理

关键词含义:

subject:

'用户’但是并不止止单指用户,也可以是第三方进程、后台帐户等等,它是指与应用有数据交互的东西,本人暂时理解为用户(比较形象),它与线程有关,一个线程一个subect对象,也可以使用以下方法来实现
两个线程中得到同一个对象(关联运行)

  • associatewith(Runnable runnable)
  • execute(Runnable runnable)
  • Callable associateWith(Callable callable)
  • v execute(Callable callable) throws ExecutionException
SecurityManager(核心):

管理所有subject,shiro的操作都是直接或间接经过了
SecurityManager的管理,它类似于springMVC中DispatcherServlet事情交给SecurityManager它将会把事情交给对应的组件.

Realm:

认证和授权,逻辑代码都是在此类中编写,连接shiro框架与应用安全数据间的“桥梁”(shiro框架通过它来知道判断数据),它就像一个封装好的dao层,当需要知道用户的权限是否可以完成某个行为或认证用户时,找到它调用方法就可以了,它可以有多个,多个Realm用来实现不同的认证/权限需求,但至少需要一个Realm,当使用javaSE时就可以ini文件代替,(ini文件是window系统的配置文件,可以直接用记事本打开)

javaSE shiro认证用户:

shiro.ini文件:

[users]
##用户名=密码,角色
zhang=123,administrator
wang=123,manager
lisi=lisi,guest
[roles]
##角色=权限(*代表全部权限,一个角色可以有多个权限,一个用户可以有多个角色,都是多对多关系)
administrator=*
manager=user:*
guest=user:query

测试代码:

public class JavaSEShiroTest {
    Logger logger = LoggerFactory.getLogger (JavaSEShiroTest.class);

    @Before
    public void before() {
    //初始化工厂类,给出shiro.ini文件地址
        Factory<SecurityManager> factory = new IniSecurityManagerFactory ("classpath:shiro.ini");
        org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance ();
        SecurityUtils.setSecurityManager (securityManager);
    }

    @Test
    public void test() {
    //获取subject对象
        Subject subject = SecurityUtils.getSubject ();
        //isAuthenticated判断是否登陆 登陆未true 否则为false
        if (!subject.isAuthenticated ()) {
            System.out.println ("还没有登陆");
            //模拟用户数据
            UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken ("zhang", "123");
            try {
            //登陆
                subject.login (usernamePasswordToken);
            } catch (UnknownAccountException uae) {
                System.out.println("用户名不存在:" + usernamePasswordToken.getPrincipal ());
            } catch (IncorrectCredentialsException ice) {
                System.out.println ("账户密码 " + usernamePasswordToken.getPrincipal () + " 不正确!");
            } catch (LockedAccountException lae) {
                System.out.println("用户名 " + usernamePasswordToken.getPrincipal () + " 被锁定 !");

            }
            if (subject.isAuthenticated ()) {
                System.out.println ("登陆成功"+usernamePasswordToken.getPrincipal ());
            }
        }
    }
}

maven依赖jar包:

  <dependencies>
        <!-- shiro核心包 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!-- slf4j日志 -->
        <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-nop</artifactId>
                 <version>1.7.2</version>
             </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <!-- 测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

运行:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值