thymeleaf模板+Shiro标签对按钮权限的控制

环境介绍

SpringBoot+Shiro+thymeleaf模板+Layui(前端)
这两天学习了shiro相关的技术,碰到一个问题:如何根据登录的不同角色,来控制不同的url。这个问题对于shiro来说非常简单,但是我的url请求在ajax里面,每次虽然拦截成功了,但是不显示拦截之后的界面(比如:您没有权限操作…)。
为了解决这个问题,我搜了很多方法,配置了拦截器来跳转页不管用(主要是我技术太菜了QAQ…)
后来我突然想到,我为啥要对url进行控制呢,直接对按钮进行控制不就得了
比如按钮可见:
管理员: 查看、编辑、删除
vip用户: 查看、编辑
普通用户:查看
正巧thymeleaf又支持shiro标签,问题就解决了~

1、相关配置

1、
pom.xml中,引入thymeleaf对shiro标签支持的依赖

<dependency><groupId>com.github.theborakompanioni</groupId><artifactId>thymeleaf-extras-shiro</artifactId><version>2.0.0</version></dependency>

2、
在shiro的config配置中,添加声明

@Beanpublic ShiroDialect shiroDialect() {return new ShiroDialect();}

3、
在html页面中使用标签

<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail" >查看</a>
<a class="layui-btn layui-btn-xs" lay-event="edit" shiro:hasRole="vip">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del" shiro:hasPermission="admin">删除</a>

2、结果演示

3、完整配置文件

为了方便和我一样的小白学习,这里把我完整的配置列出来,方便共同学习~

ShiroConfig.class

package com.braisedpanda.shirotest.shiro;import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.LinkedHashMap;
import java.util.Map;@Configuration
public class ShiroConfig {@Bean(name = "shiroFilter")public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);//这里设置没有登录时,跳转界面shiroFilterFactoryBean.setLoginUrl("/");//这里是没有授权时,跳转的界面shiroFilterFactoryBean.setUnauthorizedUrl("/notRole");Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();filterChainDefinitionMap.put("/webjars/**", "anon");filterChainDefinitionMap.put("/login", "anon");filterChainDefinitionMap.put("/", "anon");filterChainDefinitionMap.put("/userlist/**", "roles[ds]");filterChainDefinitionMap.put("/images/**", "anon");filterChainDefinitionMap.put("/layui/**", "anon");filterChainDefinitionMap.put("/lib/**", "anon");filterChainDefinitionMap.put("/student/delete/**","perms['swds']");
//        filterChainDefinitionMap.put("/userlist/**", "perms['swds']");filterChainDefinitionMap.put("/admin/**", "authc");filterChainDefinitionMap.put("/user/**", "authc");//主要这行代码必须放在所有权限设置的最后,不然会导致所有 url 都被拦截 剩余的都需要认证filterChainDefinitionMap.put("/**", "authc");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;}@Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();defaultSecurityManager.setRealm(customRealm());return defaultSecurityManager;}@Beanpublic CustomRealm customRealm() {CustomRealm customRealm = new CustomRealm();return customRealm;}//注解@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();advisor.setSecurityManager(securityManager);return advisor;}@Beanpublic ShiroDialect shiroDialect() {return new ShiroDialect();}
}

CustomRealm.class

package com.braisedpanda.shirotest.shiro;import com.braisedpanda.shirotest.bean.User;
import com.braisedpanda.shirotest.service.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;import java.util.HashSet;
import java.util.Set;public class CustomRealm extends AuthorizingRealm {@AutowiredUserService userService;@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("-------开始权限认证--------");String username = (String) SecurityUtils.getSubject().getPrincipal();SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();info.addRole("student");
//        info.addStringPermission("s1");return info;}//重写验证身份的方法@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {System.out.println("-------开始身份认证--------");String username = (String) authenticationToken.getPrincipal();String password = new String((char[]) authenticationToken.getCredentials());User user = userService.getUser(username,password);System.out.println("用户信息" + user);if (user == null) {throw new AccountException("用户名或密码错误");}return new SimpleAuthenticationInfo(username, password, getName());}}

thymeleaf模板+Shiro标签对按钮权限的控制相关推荐

  1. 自定义jsp标签实现按钮权限控制

    一.了解jsp自定义标签 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对tag handler的对象的操作,即当servlet执行时Web ...

  2. 通过servlet.jsp.tagext.TagSupport的自定义标签实现按钮权限控制

    2019独角兽企业重金招聘Python工程师标准>>> 第一步:定义标签格式 如下图先在安全目录下建立一个tld文件 内容代码如下 <?xml version="1. ...

  3. spring boot结合shiro实现用户-角色-权限的控制(包含用户名密码登陆和手机号验证码登陆)

    spring boot整合shiro实现权限校验 1.首先导入项目所需jar包 <parent><groupId>org.springframework.boot</gr ...

  4. java按钮权限控制_aop (权限控制之功能权限)

    在实际web开发过程中通常会存在功能权限的控制,不如这个角色只允许拥有查询权限,这个角色拥有CRUD权限,当然按钮权限显示控制上可以用button.tld来控制,本文就不说明. 具体控制流程就是通过登 ...

  5. springboot 按钮权限验证_SpringBoot中实现Shiro控制ThymeLeaf界面按钮级权限控制

    需求简述 在业绩核算系统中,我们使用了SpringBoot作为项目的整体架构,使用ThymeLeaf作为前端界面框架,使用Shiro作为我们的权限控制框架,Shiro作为轻量级的权限框架,使用起来非常 ...

  6. thymeleaf模板引擎shiro集成框架

    shiro权限框架.前端验证jsp设计.间tag它只能用于jsp系列模板引擎. 使用最近项目thymeleaf作为前端模板引擎,采用HTML档,未出台shiro的tag lib,假设你想利用这段时间s ...

  7. springboot+thymeleaf+shiro标签

    1,pom中加入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId&g ...

  8. Spring Boot Thymeleaf中使用Shiro标签

    在<Spring-Boot-shiro权限控制>中,当用户访问没有权限的资源时,我们采取的做法是跳转到403页面,但在实际项目中更为常见的做法是只显示当前用户拥有访问权限的资源链接.配合T ...

  9. ssm+shiro+jsp标签。关键字:shiro的jsp标签,访问拦截。本次ssm和以前的ssm整合中的依赖包不一样。写根据不同用户出现不同的按钮内容就用这shiro标签来解决。Set集合在sql中

    shiro标签只能在jsp和ftl页面文件中使用,无法在html文件中使用 shiro认证后的在jsp页面中的标签: 使用shiro标签就一定要搭配shiro框架使用,即一定要有自定义realm,因为 ...

最新文章

  1. 蓝桥杯:入门训练 圆的面积
  2. 【LaTeX】E喵的LaTeX新手入门教程(4)图表
  3. kill -3 获取threaddump信息---转载
  4. 4g模块注册上网 移远_Openwrt支持移远4G模块过程记录
  5. Android的intent之间复杂参数的传递
  6. python输入n×n的矩阵0和1_关于Python数组和矩阵的用法X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]...
  7. python 动漫卡通人物图片大全_用Python把人物头像动漫化,不同的表情给你不同的惊喜...
  8. 如何用PPT编制方案 (4)PPT中的图形设计
  9. 20164301 Exp3 免杀原理与实践
  10. svn 创建 分支 branches
  11. [leetcode]62. 不同路径
  12. win10程序员计算器的使用
  13. 最简洁详细内网穿透教程实现远程桌面连接
  14. idea_设置项目编码
  15. 华为p4用鸿蒙系统吗_为什么华为有自主研发的鸿蒙系统,却还要用安卓系统,背后的真实原因?...
  16. java牛奶订购系统,Java IO系统
  17. 2020数学建模国赛(B题)总结
  18. 文末赠书 | 豆瓣评分9.2,Python 畅销书作者再出新作!
  19. seo文章优化(怎么样做好伪原创文章)
  20. PHP集群中SESSION共享方案之Redis

热门文章

  1. 使用Compose实现淘票票选择电影座位的效果
  2. c语言 函数轨迹,轨迹方程
  3. 龙芯 python_二代龙芯派 VS 树莓派 3B+:性能孰胜一筹?
  4. 智慧交管可视化决策系统
  5. 系统总结深度学习的主要的损失函数和优化器
  6. iOS开发周报:新一代 iPhone 可能取消耳机插口,Facebook 发布 tvOS SDK
  7. 为校园超市系统增加购物车与订单功能
  8. 菜鸟haqima的Java学习之路第一天
  9. 【ArcGIS平台系列】ArcGIS平台,打造可落地的新一代Web GIS
  10. Improving Knowledge-aware Recommendation with Multi-levelInteractive Contrastive Learning