- 博客(25)
- 收藏
- 关注
原创 ThreadContext简单介绍
首先看下ThreadContext类的说明: 1、shirofilter会为当前线程创建subject 内置ThreadLocal 从之前的源码中我们知道了每一次访问都会重新建立subject然后绑定到当前线程,所以这个就很简单了,因为当前线程中获得subject不会是null。只有在没有配置shirofilter的应用中才会出现当前线程中subjec...
2019-09-05 17:00:29
13023
1
原创 Shiro身份认证之密码比较原理
1、在getAuthenticationInfof 1、从缓存获取 2、获取自定义实现realm中从数据库获取数据后 拿到数据后,调用方法密码验证 1、获取比较器 1、自定义比较器 2、默认比较器 原理: 加密密码 获取info密码 ...
2019-09-04 09:15:06
444
原创 冲突问题1---lifecycleBeanPostProcessor
如果我注释掉shiroEhcacheManager 以下所有bean的创建,项目能启动,当我@Bean(name = "lifecycleBeanPostProcessor") 创建这个bean的时候就抛出了上面的异常。这么分析过来问题应该出在这个bean上。 LifecycleBeanPostProcessor用于在实现了Initializable接口的Shiro bean初始化时调用Ini...
2019-09-04 09:14:59
2335
1
原创 冲突问题2--shiro的切面注解与springmvc的@controller
public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator(); /** * setUsePrefix(false)用于解决一个奇怪的bu...
2019-09-04 09:14:51
547
原创 冲突问题3---自定义异常与shiro异常
报错注意: 1、在自定义realm类中,抛出的异常会被Authenticationexception打包 同时会被shiroexception抓住: 使用e.getCause获取 2、由shiro抛出的错误可以: 如果其中一个现有异常类不满足您的需求,AuthenticationExceptions则可以创建自定义以表示特定的故障方案。 以下为shiro的自带异常: 的异常全是...
2019-09-04 09:14:45
1594
原创 Shiro授权缓存
1、授权和身份验证缓存关键点基本一样 不同点: 1、RedisCacheManager 创建授权和身份验证的名字key不同,但是Rediscache为同类不同对象,保存在currrentmap里面 2、保存在redis中的key不同: 授权key:keyprifix+principals 身份验证key:keyprifix+username ...
2019-09-04 09:14:35
792
原创 Shiro之Defaultsecuritymanager方法分析
Defaultsecuritymanager继承了AuthenticationSecuritymanager login()传入的有@controller层传入的token logout: 1、清除rememberme 2、清除缓存 3、清除subject 4、清除principals DelegatingSubject=SecurityUtil.getSubuject ...
2019-09-04 09:14:26
1451
原创 Shiro之Authenticatingcache(获取认证缓存原理)
一、创建过程: 1、初始化 2、判断Authenticatingcache开启缓存,且Authenticatingcache为空 原理: cache = getAuthenticationCacheLazy(); 该方法可以调用cachemanager创建 且可以通过名字创建 二、调用流程 1、authenticatingcache获取缓存 核心: 2、进入...
2019-09-04 09:14:16
998
原创 Shiro配置踩坑(序列化)
问题一: 1、在securitymanager配置 缓存管理类 cacheManager,这个cacheManager必须要在前面执行,因为setRealm 和 setSessionManage 2、源于: 将对象存入缓存中, 皆要将对象序列化 问题二: 序列化问题: 1、盐序列化: 我们在实现的realm类中,重写dogetAutenticationinfo: ...
2019-09-04 09:14:08
1377
原创 Shiro集成Redis解决频繁访
1、频繁访问redis更新session 网上解决方法: 重写retireveSession,并且储存在request,从里面获取数据 该方法减少了接近6倍访问频次 问题: 2、sessionDao方法: 在session.setTimeout(redisManager.getExpire()*1000); 保存过redis的session的时间会话时间都会被更新为0,也...
2019-09-04 09:13:25
792
1
原创 Shiro之RedisCaheManager
1、封装了RedisManger为RedisCahe 2、一个线程安全的concurrentMap 统一管理创建的RedisCache 3、定义了String keyPrefix = "shiro_redis_cache:" 并且还可以修改 核心方法: 存在地方: realm中setCaheManager 1、创建默认的RedisCache 可以提供参数key...
2019-09-04 09:13:17
308
原创 RedisCahe
1、 封装RedisManager: 在获取数据或者储存数据皆是从redismanager中的jedispool获取连接并使用方法 2、 定义了keyProfix=shiro_redis_session的开头 保存数据的key +username 但是keyprofix一般在RedisCacheManager创建RedisCache时候被覆盖为RedisCacheManag...
2019-09-03 19:55:29
570
原创 RedisManager
RedisManager: 1、包含redis的基本配置 2、包含了操作redis数据库的方法 3、声明静态的JedisPool 含有init初始化方法,会判断有无jedispool,并创建
2019-09-03 19:53:29
489
原创 login----在controller层
1、登录成功后, 1、获取到info, 2、进行rememberme(需要打开)onfiledlogin() 入口: 3、创建subject 6、注意 session委派
2019-09-03 19:52:23
996
原创 SessionDao详解
前缀: String keyPrefix=shiro_redis_session 与rediscachemanager类似: key: this.keyPrefix + sessionId; id可以自定义 value: session 原理: 包含了redismanager, 1、所有操作都是通过jedispool操作的 2、并且通过序列化SerializeUtil...
2019-09-03 19:48:15
889
原创 CreateSubject------方法五doCreateSubject
关键参数: principle authenticated host sesion seesionEnabled request response securitymanager
2019-09-03 19:40:03
337
原创 CreateSubject------方法六saveSubject(创建session关键)
开始储存subject 1、调用的是DefaultSecurityManager 中的SybjectDao: 该对象可以自定定义, 重复判断有没有session,有没有个人信息,有放入更新session 创建sesion的关键: 身份信息: currenexistIngPrincipal:当前subject的身份信息 existIngPrincipal:sess...
2019-09-03 19:38:16
311
原创 CreateSubject-------方法三resolveSession详解(重要)
方法三: 功能: 1、查询有没session 更新session 2、查看sessionid 通过cookie存有session对应的id 通过遍历所有cookie查询自定义的cookie 3、获取默认的 resolveSession详解 内部有两个session方法 1、if中判断方法: 通过如下的id类型从容器获取session 通过...
2019-09-03 19:31:54
469
原创 Shiro身份验证----subject提交
获取subject对象 1、SecurityUtils.getSubject() 2、调用的是ThreadContext 2、从ThreadContext获取Subject 1、其内部有静态创建了ThreadLocal<Map<Object,Object>> 2、获取subject的key:org.apache.shiro.util.ThreadCon...
2019-09-03 17:41:34
945
原创 访问之subject--存储
1、绑定到 ThreadContext 1、execute 1、remove:移除以该线程为key的securitymanager 2、在储存 remove bind 更新 最后移除shirofilterbean
2019-09-03 17:37:56
379
原创 访问开始之----ShiroFilterFactoryBean
过滤器工厂: ShiroFilterFactoryBean 创建的filter含有SecurityManager 1、产生的filter,在浏览器访问时候便开始启动 就是该过滤器: 1、开始调用AbstractFilter中对 方法: 2、开始创建subject(subject为线程绑定对象,存入ThreadContext) 3、由WebSubject...
2019-09-03 17:36:29
373
原创 mybatis延迟加载(一对多)
什么是延迟加载? resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。 需求: 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 延迟加载:先从单表查询、需要时再从关联表...
2019-08-02 20:07:46
569
转载 单例模式多种创建考虑
package com.java.oop.instance; /** 面试:谈谈你对单例模式的认识? 对象单例设计:(设计类时保证类的实例在内存中只有一份) 1)内部设计实现(对类自身进行设计) 2)外部设计实现(对类的对象提供一种池) */ //如何保证如下类的设计在内存中只有一份类的实例? //方案1: class Singleton01{ //构造方法私有化,不允许外界直接构建对象 pri...
2019-07-26 16:45:10
211
原创 实现一个算法确定字符串中的字符是否均唯一出现(lintcode)
样例 样例 1: 输入: “abc_____” 输出: false 样例 2: 输入: “abc” 输出: true 挑战 如果不使用额外的存储空间,你的算法该如何改变? public static void main(String[] args) { System.out.println(new WorkCode3().isUnique("abc_______")); } pu...
2019-05-13 22:15:08
856
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅