shiro学习笔记(二)

网友投稿 672 2022-10-13

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 filterMap = new LinkedHashMap<>(); //配置拦截路径,注意顺序,先配置无需权限的路径,过滤链定义,从上向下顺序执行,一般将/**放在最为下边 filterMap.put("/all/login2","anon"); filterMap.put("/all/toLogin2","anon"); //配置资源授权过滤器 filterMap.put("/all/toUpdateUser","perms[user:update]"); filterMap.put("/all/deleteUser","perms[user:delete]"); filterMap.put("/all/insertUser","perms[user:add]"); filterMap.put("/all/**","authc"); //设置登录url,如果不设置的,shiro会自动跳转到login.jsp shiroFilterFactoryBean.setLoginUrl("/all/toLogin2"); //设置未授权url shiroFilterFactoryBean.setUnauthorizedUrl("/all/toUnanthorizedUrl"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); System.out.print("shiro-已经加载"); return shiroFilterFactoryBean; }

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

com.github.theborakompanioni thymeleaf-extras-shiro 2.0.0

2.在shiro配置类配置shiroDialect

//配置shiroDialect,用于thymeleaf和shiro标签使用 @Bean public ShiroDialect getShiroDialect(){ return new ShiroDialect(); }

3.在登录成功html页面引入权限标签

Title

AllUser

num id nick phone Email address 操作
xxx 123 xxx.com xxx
首页 上一页 首页 上一页 下一页 尾页 下一页 尾页

4.测试

先测试用户一:

用户二

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:程序员线性代数教程(程序员线性代数教程书)
下一篇:microservice-app 一个golang开发的微服务架构应用程序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~