栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Shiro 安全框架笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Shiro 安全框架笔记

Subject

在 Web 环境下,主要的 Subject 实现类是 WebDelegatingSubject

 

Session

通过调用 Subject#getSession() 方法进行懒加载调用。

如果使用的是 DefaultWebSecurityManager,则通过将 HttpSession 封装到 shiro 的 HttpServletSession 中。

  • 关闭 shiro session 存储

在 DefaultSubjectDAO 中的 save() 方法,如果关闭了 shiro session 存储,则不会将 2 个属性(principals、authenticationState)存储到 session

Shiro 过滤器
AnonymousFilter(anon)


匿名过滤器,请求直接通过。

AccessControlFilter
public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
    return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);
}
AuthenticationFilter
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
    Subject subject = getSubject(request, response);
    return subject.isAuthenticated();
}
AuthenticatingFilter

如果 subject 进行了认证,或者这是除了 loginUrl 之外的放行 url,则允许访问;否则,不允许。

protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
    return super.isAccessAllowed(request, response, mappedValue) ||
            (!isLoginRequest(request, response) && isPermissive(mappedValue));
}
FormAuthenticationFilter

枚举名称 authc

该过滤器是 shiro-spring 包 ShiroWebConfiguration 中 shiroFilterChainDefinition 唯一注册的一个过滤器。

onAccessDenied 方法分 loginUrl 处理和非 loginUrl 处理:

  1. 当请求是 loginUrl 时,其中又根据是否为 POST 请求判断是否是 login 页面请求还是,login 提交。
  2. 当请求是非 loginUrl 时,向 session 存储了一个属性 shiroSavedRequest, 然后跳转到登录页面。
BasicHttpAuthenticationFilter

onAccessDenied 逻辑:

  1. 通过请求头 Authorization 判断是否为 login 请求,如果是,执行 executeLogin 逻辑,获取 username, password 构造 AuthenticationToken 进行 Realm 认证。
  2. 如果不是 login 请求,或者登录失败,发送质询

 

Spring Shiro

ShiroFilterFactoryBean#createInstance

  1. securityManager 必须非 null,而且为 WebSecurityManager 实例
  2. createFilterChainManager(),其中包括创建默认的过滤器

默认的过滤器由 DefaultFilterChainManager 管理,在构造器 addDefaultFilters() 调用

默认过滤器见枚举 DefaultFilter

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号