Shiro认证和授权的思路

认证


(1)获取当前的Subject,调用SecurityUtils.getSubject();

(2)测试当前的用户是否已经被认证,即是否已经登录。调用Subject的isAuthenticated();

(3)若没有被认证,则把用户名和密码封装为UsernamePasswordToken对象。

        ①创建一个表单页面

        ②把请求提交到SpringMVC的Handler

        ③获取用户名和密码

(4)执行登录:调用Subject的login(AuthenticationToken)方法。

(5)自定义Realm的方法,从数据库中获取对应的记录,返回给Shiro。

        ①实际上需要继承org.apache.shiro.realm.AuthenticatingRealm类

        ②实现doGetAuthenticationInfo(AuthenticationToken)方法

(6)由shiro完成对密码的比对。


  授权

Shiro支持三种方式的授权:

        编程式:通过写if/else授权代码块完成。

        注解式:通过在执行的Java方法上放置相应的注解完成,没有权限将抛出相应的异常。

        JSP/GSP标签:在JSP/GSP页面通过相应的标签完成。

2.2.授权的实现
授权需要继承AuthorizingRealm类,并实现其doGetAuthorizationInfo方法。

AuthorizingRealm类继承自AuthenticatingRealm,但没有实现AuthenticatingRealm中的doGetAuthenticationInfo,所以认证和授权只需要继承AuthorizingRealm就可以了,同时实现他的两个抽象方法。

  //SimpleAuthrizationInfo用于向用户授权的类对象,这里获取对象
        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();//将角色和权限信息设置到SimpleAuthorizationInfo
        Subject subject = SecurityUtils.getSubject();//获取当前的对象
        User principal = (User)subject.getPrincipal();//获得当前对象的唯一标识符号,是任意的形式
        //给用户添加权限
        info.addStringPermission(principal.getPerms());//获得user权限,并赋予当钱请求需要授权才能访问的资源用户
        return info;
        将SimpleAuthorizationInfo,即对于用户的授权信息返回,如果我们在上面进行的授权操作授予的权限/用户本身具有的权限包括了请求当前资源的权限,那么资源请求成功,如果不包含就请求失败


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值