shiro学习笔记(二)
shiro学习笔记(二)
今日内容:
shiro资源授权thymeleaf整合shiro权限标签
1.shiro资源授权
1.授权:
授权,又称作为访问控制,是对资源的访问管理的过程。换句话说,控制谁有权限在应用程序中做什么
2.授权方式
在 Shiro 中执行授权可以有 3 种方式:
编写代码——你可以在你的 Java 代码中用像 if 和 else 块的结构执行授权检查。JDK 的注解——你可以添加授权注解给你的 Java 方法。jsP/GSP 标签库——你可以控制基于角色和权限的 JSP 或者 GSP 页面输出。
3.实现
1.编写代码(硬编码)
1.无论哪种形式都需要在shiro的配置类配置资源过滤器,配置资源授权路径和未授权页面路径
@Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean( @Qualifier("securityManager") DefaultWebSecurityManager securityManager){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); //-,拦截路径有顺序,所以采用LinkedHashMap Map
2.硬编码实现资源授权 回到自定义的realm,重写doGetAuthorizationInfo方法
/** * 授权逻辑 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.print("执行授权逻辑"); //给资源进行授权 SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(); //添加授权字符串 //1.硬编码形式实现资源授权 simpleAuthorizationInfo.addStringPermission("user:update"); return simpleAuthorizationInfo; }
2.连接数据库,从数据库中获取授权字符串,实现资源授权
1.数据库表添加授权字符串字段
2.编写好相应的dao层接口和mapper.xml
3.重写doGetAuthorizationInfo方法
/** * 授权逻辑 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.print("执行授权逻辑"); //给资源进行授权 SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(); //添加授权字符串 //1.硬编码形式实现资源授权 //simpleAuthorizationInfo.addStringPermission("user:update"); //2.从数据库中获取授权字符串 //获取当前已经认证的用户的用户名 Subject subject = SecurityUtils.getSubject(); String username = (String) subject.getPrincipal(); UserInfo userInfo = userService.getPerm(username); if (userInfo!=null){ simpleAuthorizationInfo.addStringPermission(userInfo.getPerm()); return simpleAuthorizationInfo; }else { return null; } }
资源授权在这里就完成
二,thymeleaf整合shiro权限标签
目的:实现不同权限用户看到的页面也不同
1.导入jar包,完善pom.xml
2.在shiro配置类配置shiroDialect
//配置shiroDialect,用于thymeleaf和shiro标签使用 @Bean public ShiroDialect getShiroDialect(){ return new ShiroDialect(); }
3.在登录成功html页面引入权限标签