springboot整合shiro之thymeleaf使用shiro标签

前言 【springboot整合shiro之thymeleaf使用shiro标签】我们紧接着 上一篇 文章,我们使用账号 jack 和账号 Tom 来分别登录,在上一篇文章测试中可以看到,这两个账号无论哪一个登录,首页页面都会显示 add 页面和 update 页面两个超链接,而对于这两个账号来说,一个拥有访问 add 页面的权限,一个拥有访问 update 页面的权限。那么问题来了,如何才能根据不同用户的身份角色信息来显示不同的页面内容呢?这就要使用 shiro 标签了
thymeleaf 模板引擎使用 shiro 标签
引入依赖

com.github.theborakompanionithymeleaf-extras-shiro2.0.0

配置类 ShiroConfig
@Configurationpublic class ShiroConfig {// 安全管理器@Beanpublic DefaultWebSecurityManager getDefaultWebSecurityManager(UserRealm userRealm) {DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); defaultWebSecurityManager.setRealm(userRealm); return defaultWebSecurityManager; }// thymeleaf模板引擎中使用shiro标签时,要用到@Beanpublic ShiroDialect getShiroDialect() {return new ShiroDialect(); }@Beanpublic ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager defaultWebSecurityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager); // 设置登录页面urlshiroFilterFactoryBean.setLoginUrl("/user/login"); shiroFilterFactoryBean.setSuccessUrl("/user/index"); shiroFilterFactoryBean.setUnauthorizedUrl("/user/unauthorized"); // 注意此处使用的是LinkedHashMap是有顺序的,shiro会按从上到下的顺序匹配验证,匹配了就不再继续验证Map filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/layer/**", "anon"); // 静态资源放行filterChainDefinitionMap.put("/img/**", "anon"); filterChainDefinitionMap.put("/jquery/**", "anon"); // add.html页面放行filterChainDefinitionMap.put("/user/add", "authc"); // update.html必须认证filterChainDefinitionMap.put("/user/update", "authc"); // index.html必须通过认证或者通过记住我登录的,才可以访问filterChainDefinitionMap.put("/user/index", "user"); // 设置授权,只有user:add权限的才能请求/user/add这个urlfilterChainDefinitionMap.put("/user/add", "perms[user:add]"); filterChainDefinitionMap.put("/user/update", "perms[user:update]"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; }}

index.html 页面
  • 首先要引入shiro 的命名空间:xmlns:shiro=http://www.pollix.at/thymeleaf/shiro
  • 使用相应的 shiro 标签
首页 - 锐客网首页add
updateupdate退出登录

shiro 标签说明
https://shiro.apache.org/jsp-tag-library.html
https://github.com/apache/shiro/blob/main/web/src/main/resources/META-INF/shiro.tld
标签 含义
shiro:principal 当前用户的登录信息,用户名之类
shiro:guest="" 验证是否是游客,即未认证的用户
shiro:user="" 验证是否是已认证或已记住用户
shiro:authenticated="" 验证是否是已认证用户,不包括已记住用户
shiro:notAuthenticated= “” 未认证用户,但是 已记住用户
shiro:lacksRole=“admin” 表示没有 admin 角色的用户
shiro:hasAllRoles=“admin, user1” 表示需要同时拥有两种角色
shiro:hasAnyRoles=“admin, user1” 表示 拥有其中一个角色即可
shiro:lacksPermission=“admin:delete” 类似于 shiro:lacksRole
shiro:hasAllPermissions=“admin:delete, admin:edit” 类似于 shiro:hasAllRoles
shiro:hasAnyPermission=“admin:delete, admin:edit” 类似于 hasAnyRoles
测试 测试一
首先使用账号 jack 来登录,查看首页页面,如下
springboot整合shiro之thymeleaf使用shiro标签
文章图片

再看控制台日志,如下,注意账号 jack 拥有的权限,在 index.html 页面有两个 标签,故而进行了两次授权操作
springboot整合shiro之thymeleaf使用shiro标签
文章图片

测试二
再使用账号 Tom 来登录,查看首页页面,如下
springboot整合shiro之thymeleaf使用shiro标签
文章图片

再看控制台日志,如下,注意账号 Tom 拥有的权限,在 index.html 页面有两个 标签,故而进行了两次授权操作
springboot整合shiro之thymeleaf使用shiro标签
文章图片

源码:springboot-shiro
到此这篇关于springboot整合shiro之thymeleaf使用shiro标签的文章就介绍到这了,更多相关springboot整合shiro使用shiro标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读