Shiro冠军宝座

Shiro框架奥利给!!

Shiro 框架是一个开源的安全框架,它将软件系统中的安全认证等功能提取出来 实现用户的身份认证,权限授权,加密,会话,缓存等功能的管理 组成一个通用的安全认证框架

1.shiro身份认证的过程分析及实现(判定用户身份的合法性),为什么要认证?
2.Shiro授权过程分析及实现(对资源访问进行权限授权)为什么要授权?
3.Shiro 缓存,会话时长,记住我等功能的实现.为什么要使用此缓存,是否可以使用第三方缓 存?
4.Shiro框架的核心组件?Shiro中的session的默认时长是多少?

  • ?shiro 中授权功能的实现?
    Spring整合shiro框架,在需要授权的方法上+注解 底层会在访问方法时 检查注解拿到注解的内容,提交给安全管理器,基于注解的内容对用户的权限进行管理

  • ?Shiro 缓存,会话时长,记住我等功能的实现.为什么要使用此缓存,是否可以使用第三方缓存?
    Shiro缓存中底层使用的softHashMap 在JVM内存满时清除缓存!
    使用缓存的原因是因为 每次进行授权的时候,都要进行查询数据库中多张表的操作,如果在高并发的时候使用缓存更能提高性能!

  • ?记住我功能的实现,以及为什么要设计这个功能?
    记住我功能是shiro框架自己带的特性,需要在服务器端创建cookie 在客户端存储用户信息.所以要打开cookie,服务器配置cookiemanager 同时注入给 安全管理器 修改过滤信息
    设计记住我功能是因为用户选择性的使用,记住我 可以实现不用每次登陆都需要验证

  • ?Shiro中使用的会话是谁?httpsession默认时长?30分钟

 private Cookie sessionIdCookie;
    private boolean sessionIdCookieEnabled;
    private boolean sessionIdUrlRewritingEnabled;
    public DefaultWebSessionManager() {
        Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
        cookie.setHttpOnly(true); //more secure, 

我们使用了 ShiroHttpSession查看源码:

public class ShiroHttpSession implements HttpSession {
    //TODO - complete JavaDoc
    public static final String DEFAULT_SESSION_ID_NAME = "JSESSIONID";
    private static final Enumeration EMPTY_ENUMERATION = new Enumeration() {

? 我们来猜测 我们使用的shiro中的session是否是web HTTP中的HTTPSession,以及它的调用过程是怎样的呢
在这里插入图片描述
?通过我们断点跟踪发现确实是将数据存到了HTTPSession 但是却没有执行 它的实现类中 任何add以及put 的方法,那么它是如何实现将数据存储到HTTPSession中的呢?
这时候我们就假设它并不是继承或者实现 而是一种has a关系 我们查看了 原来shiro 自己还有一个Session接口,源码如下:
在这里插入图片描述
通过断点我们得出了shiro 使用了 SimpleSession 同时注入了HttpServletSession 在HttpServletSession源码构造方法中我们可以看出has a httpSession

public class HttpServletSession implements Session {
    private static final String HOST_SESSION_KEY = HttpServletSession.class.getName() + ".HOST_SESSION_KEY";
    private static final String TOUCH_OBJECT_SESSION_KEY = HttpServletSession.class.getName() + ".TOUCH_OBJECT_SESSION_KEY";
    private HttpSession httpSession = null;
    public HttpServletSession(HttpSession httpSession, String host) {
        if (httpSession == null) {
            String msg = "HttpSession constructor argument cannot be null.";
            throw new IllegalArgumentException(msg);
        }

如何实现存储?直接调用了put方法

public void setAttribute(Object key, Object value) {
        if (value == null) {
            removeAttribute(key);
        } else {
            getAttributesLazy().put(key, value);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值