专栏首页shimeath的Java学习06 Spring Boot 整合Shrio

06 Spring Boot 整合Shrio

整合Shrio

整合方法

  1. 导入依赖 <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.3</version> </dependency>
  2. 创建UserRealm类,继承AuthorizingRealm public class UserRealm extends AuthorizingRealm { //授权 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { return null; } //认证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { return null; } }
  3. 创建ShiroConfig类配置shrio @Component public class ShiroConfig { //第三步:创建ShiroFilterFactoryBean @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("getDefaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager); //过滤 Map<String, String> filterChainDefinitionMap = new LinkedHashMap(); //filterChainDefinitionMap.put("/user/add", "anon"); //filterChainDefinitionMap.put("/user/update", "authc"); filterChainDefinitionMap.put("/user/*", "authc");//可使用通配符* shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); shiroFilterFactoryBean.setLoginUrl("/toLogin"); return shiroFilterFactoryBean; } //第二步:创建DefaultWebSecurityManager对象 @Bean public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(userRealm); return securityManager; } //第一步:创建Realm对象 @Bean public UserRealm userRealm(){ return new UserRealm(); } }

shiro使用方法

基本配置

  1. 获取当前subject Subject subject = SecurityUtils.getSubject();
  2. 建立令牌 UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password);
  3. try catch判断登录是否成功 try { subject.login(usernamePasswordToken); //未异常,登陆成功 return "index"; } catch (UnknownAccountException e) { //用户名不存在 e.printStackTrace(); model.addAttribute("msg", "用户名不存在"); return "toLogin"; } catch (IncorrectCredentialsException e) { //密码错误 e.printStackTrace(); model.addAttribute("msg", "密码错误"); return "toLogin"; }
  4. UserRealm类中进行认证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("AuthenticationInfo=>执行"); String userName = "admin"; String password = "123456"; UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; if(!token.getUsername().equals(userName)) { return null; } //可将用户信息对象存入第一个参数内 return new SimpleAuthenticationInfo("",password, ""); }

角色授权

//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    //建立授权对象
    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
    //获取当前用户对象
    Subject subject = SecurityUtils.getSubject();
	//获取用户信息
    Blogger blogger = (Blogger) subject.getPrincipal();
    //判断是否为root用户
    //真实项目中通过判断数据库字段权限类型
    String user = blogger.getUserName().equals("root")?"user:add":"user:update";
    //添加权限
    simpleAuthorizationInfo.addStringPermission(user);
	
    return simpleAuthorizationInfo;
}

Shiro整合thymeleaf

  1. 添加maven依赖 <dependency> <groupId>com.github.theborakompanioni</groupId> <artifactId>thymeleaf-extras-shiro</artifactId> <version>2.0.0</version> </dependency>
  2. 添加命名空间 xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"
  3. 在ShiroConfig中配置Bean @Bean(name = "shiroDialect") public ShiroDialect shiroDialect(){ return new ShiroDialect(); }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 字符流出现乱码问题

    shimeath
  • 其他流---基本数据处理流

    shimeath
  • 打印流

    原有System.out.println 现改为PrintStream类型的实例.println以完成输出到文件

    shimeath
  • 【7-9 有重复的数据I (20 分)】【此题卡输入,需要自己写个输入挂】

    _DIY
  • ONOS集群选举分析

    首先简单介绍下自己,之前是做 floodlight 控制器开发的,鉴于 ODL 和 onos 的如火如荼的发展,如果不对了解点就感觉自己 OUT 了,因此忙里偷...

    SDNLAB
  • 源码阅读--Retrofit

    提莫队长
  • GO语言-new()分配与构造和初始化结构

    GO语言-new()分配与构造和初始化结构 学习笔记 new()和make()他们做不同的事情,并适用于不同类型,(初学时很容易能会造成混淆)不好理解啊 new...

    李海彬
  • java代码调用shell脚本

    神秘的寇先森
  • C#基于yolov3的行人检测

    yolo_cpp_dll中的yolo_v2_class.cpp需要修改下构造函数detect_image

    zls365
  • SpringBoot整合

    崔笑颜

扫码关注云+社区

领取腾讯云代金券