Spring Boot 学习笔记(二)
来源:互联网 发布:怎么在淘宝上发布宝贝 编辑:程序博客网 时间:2024/05/21 17:28
2017.11.20
SpringBoot之Shiro配置
(1)pom文件的dependency
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3.2</version> <exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions></dependency>(2)在使用的Shiro的过程中,Shiro主要通过Subject的login方法将token传入自定义的Realm中,而springboot中shiro主要通过shiroFilter来过滤地址,同时在实现的ShiroFactoryBean中配置SecurityManager(安全管理器),安全管理主要讲用户的自定义的Realm装配至其中以实现安全管理,需要注意的是securityManager、shiroRealm都需要装配成bean,核心代码如下:
shiroFilter类
@Beanpublic ShiroFilterFactoryBean shirFilter(DefaultWebSecurityManager securityManager) { System.out.println("ShiroConfiguration.shirFilter()"); ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); shiroFilterFactoryBean.setLoginUrl("/login"); //默认的登陆访问url shiroFilterFactoryBean.setSuccessUrl("/main"); //登陆成功后跳转的url shiroFilterFactoryBean.setUnauthorizedUrl("/403"); //没有权限跳转的url Map<String, String> hashMap = new LinkedHashMap<String, String>(); hashMap.put("logout","anon"); hashMap.put("/**","authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(hashMap); return shiroFilterFactoryBean;}
securityManager类
@Beanpublic DefaultWebSecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myShiroRealm()); return securityManager;}
shiroRealm的bean
@Beanpublic MyShiroRealm myShiroRealm(){ MyShiroRealm myShiroRealm = new MyShiroRealm(); return myShiroRealm;}该bean中的myShiroRealm类是获取token的关键,在该类中可以通过token中的数据判断是否通过验证,并且在shiro装配完之后执行subject.login(token)方法也会直接进入该类的doauthenticationInfo的方法,在这个方法中返回由对象、密码、盐、realm名组成的AuthenticationInfo,用于在controller中进行下一步判断:
@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { try { UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; UserService userService = SpringContextUtil.getBean("userService"); UserModel user = userService.queryUserByName(token.getUsername()); if(null==user){ throw new UnknownAccountException(); } String password = user.getPassword(); // 密码加盐处理 String source = user.getSalt(); ByteSource credentialsSalt = new Md5Hash(source); SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( user, password, credentialsSalt, super.getName()); return simpleAuthenticationInfo; } catch (UnknownAccountException ua) { throw new UnknownAccountException(ua); } catch (Exception e){ throw new BusinessException("Error"); }}至此Shiro就配置完成了,虽然比较复杂,但是shiro强大的过滤和认证授权功能能够方便的使用,且能维护系统的安全,值得使用
阅读全文
0 0
- spring boot学习笔记(二)
- Spring Boot学习笔记(二)
- Spring Boot 学习笔记(二)
- Spring读书学习笔记(二)——Spring boot
- Spring boot 学习笔记—带来的好处(二)
- Spring Boot 学习笔记(二)——使用
- Spring Boot学习笔记-整合Jsp (二)
- Spring-Boot学习笔记(二) 配置文件之初步使用
- Spring Boot学习笔记----mybatis注解(二)
- Spring Boot学习笔记:(二)常规属性配置
- Spring Boot学习(二)
- Spring Boot学习入门篇(二)--使用Spring Boot
- spring-boot笔记-属性配置(二)
- spring boot 笔记(二):filter
- spring-boot学习笔记
- Spring Boot学习笔记
- Spring Boot学习笔记
- spring boot 学习笔记
- 实验2 单链表的创建和操作
- Android中Textview显示带html文本一-------【HTML标签】
- 关于linux mmc/sd驱动程序架构
- 《源代码》
- python中split()函数与strip()
- Spring Boot 学习笔记(二)
- 线程池简单例子
- caffe python接口:可视化每层图像特征
- leetcode
- Python学习笔记--一些小细节
- FPGA中亚稳态
- C#编写记事本程序(下)——扩展功能
- webdriver--Python
- android中getLocationInWindow 和 getLocationOnScreen的区别