[spring-boot] 集成shiro (二)
来源:互联网 发布:监控网络拓扑图 编辑:程序博客网 时间:2024/05/16 17:27
session
shiro有自己的session管理类,因为之前已经在项目中集成了spring session,shiro也可以使用spring session,只要配置shiro使用容器的session管理即可,spring session在后面拦截了容器的session实现。
@Bean(name = "securityManager") public SecurityManager createSecurityManager(UserRealm userRealm,SessionManager shiroSessionManager) { DefaultWebSecurityManager manager = new DefaultWebSecurityManager(userRealm); manager.setSessionManager(new ServletContainerSessionManager()); return manager; }
spring session可用于分布式环境,所以在授权后,把用户信息存到session中,可以方便共享:
//验证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String userName = (String) token.getPrincipal(); String password = new String((char[]) token.getCredentials()); User user = userService.findUserByAccount(userName, password); if (user == null) { throw new IncorrectCredentialsException(); //如果验证失败返回错误信息 } //如果身份认证验证成功,将用户信息保存起来 return new SimpleAuthenticationInfo(user, password, getName()); }//登录api try { subject.login(token); //if no exception, that's it, we're done! } catch (AuthenticationException ae) { throw new BusinessException("用户名或密码错误"); } User user = (User) subject.getPrincipal(); subject.getSession().setAttribute("user", user); //将用户信息存放到session//读取//一般放到BaseController中 @Autowired protected HttpServletRequest request; protected User getUser() { return (User) request.getSession().getAttribute("user"); }
cache
可以使用redis来缓存,实现shiro的CacheManager和Cache的接口即可.
SpringShiroCache.java
import org.apache.shiro.cache.Cache;import org.apache.shiro.cache.CacheException;import org.springframework.data.redis.core.ValueOperations;import java.util.Collection;import java.util.Set;public class SpringShiroCache<K, V> implements Cache<K, V> { private ValueOperations<K, V> valueOperations; private org.springframework.cache.Cache springCache; public SpringShiroCache(ValueOperations<K, V> valueOperations, org.springframework.cache.Cache redisCache) { this.springCache = redisCache; this.valueOperations = valueOperations; } @Override public V get(K k) throws CacheException { return valueOperations.get(k); } @Override public V put(K k, V v) throws CacheException { valueOperations.set(k, v); return v; } @Override public V remove(K k) throws CacheException { V v = valueOperations.get(k); springCache.evict(k); return v; } @Override public void clear() throws CacheException { springCache.clear(); } @Override public int size() { throw new UnsupportedOperationException(); } @Override public Set<K> keys() { throw new UnsupportedOperationException(); } @Override public Collection<V> values() { throw new UnsupportedOperationException(); }}
RedisShiroCacheManager.java
import org.apache.shiro.cache.Cache;import org.apache.shiro.cache.CacheException;import org.apache.shiro.cache.CacheManager;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;@Component("shiroCacheManager")public class RedisShiroCacheManager implements CacheManager { @Autowired private RedisCacheManager cacheManager; @Autowired private RedisConnectionFactory redisConnectionFactory; @Override public <K, V> Cache<K, V> getCache(String s) throws CacheException { RedisTemplate<K,V> redisTemplate=new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.afterPropertiesSet(); return new SpringShiroCache<>(redisTemplate.opsForValue(),cacheManager.getCache(s)); }}
ShiroConfig.java
//创建一个securityManager @Bean(name = "securityManager") public SecurityManager createSecurityManager(UserRealm userRealm, CacheManager shiroCacheManager, SessionManager shiroSessionManager) { DefaultWebSecurityManager manager = new DefaultWebSecurityManager(userRealm); manager.setCacheManager(shiroCacheManager); manager.setSessionManager(shiroSessionManager); return manager; }
阅读全文
0 0
- [spring-boot] 集成shiro (二)
- spring-boot集成shiro
- spring boot集成shiro
- [spring-boot] 集成shiro
- spring boot 集成shiro
- spring boot 集成 shiro
- spring boot(四)shiro权限集成
- IntelliJ IDEA Spring Boot(6) 集成Hibernate+Shiro+Ehcache
- spring boot 集成shiro的配置
- Spring Boot 集成Shiro和CAS
- Spring Boot 集成Shiro和CAS
- Spring Boot 集成Shiro和CAS
- Spring Boot 集成Shiro和CAS
- Spring Boot 集成Shiro和CAS
- spring boot 集成shiro的配置
- Spring Boot 集成Shiro和CAS
- Spring Boot 集成Shiro和CAS
- Spring Boot 集成Shiro和CAS
- Android 中Message,MessageQueue,Looper,Handler详解+实例
- shiro简单配置
- 1073. Scientific Notation (20)
- hdu 2022 海选女主角
- 《算法》第四版 初学习惯调整 记录
- [spring-boot] 集成shiro (二)
- 点评:系统集成不需要Common Data Model(CDM)吗?
- 1 Github入门
- 电脑键盘上三个指示灯代表什么意思?
- java基础入门补充(001) native方法
- css reset总结
- Java递归应用:输出树形菜单
- 一个有趣的问题——根式
- java中check异常与未检异常的区分