SpringBoot 集成 Shiro:使用Shiro的权限管理(六)

  上一章使用了Shiro的角色管理,现在加入粒度更小的权限管理,即根据用户角色分配的权限来判断用户能否访问页面

  准备实体类和修改数据源

@Getter
@Setter
public class Role implements Serializable {
    private String name;

    private Set<Permission> permissions;

    public Role(String name) {
        this.name = name;
        this.permissions = new HashSet<>();
    }
}

Role.java

@Getter
@Setter
@AllArgsConstructor
public class Permission {
    private String name;
}

Permission.java

public class UserService {
    private static final Map<String, User> userMap = new HashMap<>();

    static {
        userMap.put("user", new User("user", "123456"));
        userMap.put("admin", new User("admin", "123456"));
        userMap.put("super", new User("super", "123456"));
        Role userRole = new Role("user");
        Role adminRole = new Role("admin");
        Role superRole = new Role("super");
        Permission getPermission = new Permission("get");
        Permission addPermission = new Permission("add");
        adminRole.getPermissions().add(getPermission);
        superRole.getPermissions().add(getPermission);
        superRole.getPermissions().add(addPermission);
        userMap.get("user").getRoles().add(userRole);
        userMap.get("admin").getRoles().add(userRole);
        userMap.get("admin").getRoles().add(adminRole);
        userMap.get("super").getRoles().add(userRole);
        userMap.get("super").getRoles().add(adminRole);
        userMap.get("super").getRoles().add(superRole);
    }
    public static User getUserByName(String name) {
        return userMap.get(name);
    }
}

UserService.java

  添加、修改测试页面

<!—adduser.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
添加用户界面
<br/>
<a href="/index">返回首页</a>
</body>
</html>

adduser.html

<!—admin.html-->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>管理界面</title>
</head>
<body>
<p th:text="${user.username}+‘ 管理员您好‘"></p>
<br>
这里是用户列表
<br/>
<a href="/adduser">添加用户</a>
<a href="/index">返回首页</a>
</body>
</html>

admin.html

  配置Controller

@RequestMapping(value = {"/adduser"}, method = RequestMethod.GET)
public String addUser() {
    return "adduser";
}

HomeController.java

  在Realm.doGetAuthorizationInfo() 为用户添加拥有的权限

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    User user = (User) principalCollection.getPrimaryPrincipal();
    for (Role role : user.getRoles()) {
        info.addRole(role.getName());
        for (Permission permission : role.getPermissions()) {
            info.addStringPermission(permission.getName());
        }
    }
    return info;
}

MyRealm.java

  配置Shiro拦截器

//权限拦截
filterChainDefinitionMap.put("/user", "authc,roles[user]");
filterChainDefinitionMap.put("/admin", "authc,roles[user,admin],perms[get]");
filterChainDefinitionMap.put("/adduser", "authc,perms[add,get]");

启动服务,在登录之后admin用户能查看用户列表,不能添加用户,super用户不受限制!

到这里,Shiro和SpringBoot的集成就告一段落了。实际使用中肯定会有更多的东西可以挖掘

源码地址:https://github.com/StarkTan/SpringBootShiro

原文地址:https://www.cnblogs.com/starktan/p/9608908.html

时间: 2024-10-04 08:32:12

SpringBoot 集成 Shiro:使用Shiro的权限管理(六)的相关文章

7. 整合shiro,搭建粗粒度权限管理

shiro是一个易用的权限管理框架,只需提供一个Realm即可在项目中使用,本文就将结合上一篇中搭建的权限模块.角色模块和用户模块来搭建一个粗粒度的权限管理系统,具体如下:1. 添加shiro依赖和与thymeleaf集成的依赖,并更新项目: 1 <dependency> 2 <groupId>org.apache.shiro</groupId> 3 <artifactId>shiro-spring</artifactId> 4 <vers

Shiro基础学习(一)&mdash;权限管理

一.基本概念 1.权限管理      只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源.     权限管理包括用户认证和授权两部分.   2.用户认证     用户认证,用户去访问系统,系统要验证用户身份的合法性. 最常用的用户身份验证的方法: (1)用户名密码方式 (2)指纹打卡机. (3)基于证书验证方法. 系统验证用户身份合法,用户方可访问系统的资源. (1)用户认证的流程        (2)关

【shiro】(1)---了解权限管理

了解权限管理 一.概念 1.什么是权限管理 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源. 权限管理包括用户认证和授权两部分. (1)用户认证 用户认证,用户去访问系统,系统要验证用户身份的合法性.最常用的用户身份验证的方法:1.用户名密码方式.2.指纹打卡机.3.基于证书验证方法..系统验证用户身份合法,用户方可访问系统的资源. 关键对象 subject:主体,理解为用户,可能是程序,都要去访问系

SpringBoot(十四):springboot整合shiro-登录认证和权限管理

原文出处: 纯洁的微笑 这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security.Apache Shiro等安全框架,但是由于Spring Security过于庞大和复杂,大多数公司会选择Apache Shiro来使用,这篇文章会先介绍一下Apache Shiro,在结合Spring Boot给出使用案例. Apache Shiro What is Ap

springboot(五):springboot整合shiro-登录认证和权限管理

http://www.ityouknow.com/springboot/2017/06/26/springboot-shiro.html 原文地址:https://www.cnblogs.com/cnki/p/9021985.html

Shiro Review——Shiro介绍

一,Shiro整体介绍 shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单. shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro. 使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开

Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 PageHelper 进行分页显示.按照前面的博客,已经可以搭建一个简单的 Spring Boot 系统,本篇博客继续对此系统进行改造,主要集成了 Shiro 权限认证框架,关于 Shiro 部分,在本人之前的博客(认证与Shiro安全框架)有介绍到,这里就不做累赘的介绍. 此系列的博客为实践部分

SpringBoot集成Shiro 实现动态加载权限

一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .uri 权限后,后端动态分配权限,用户无需在页面重新登录才能获取最新权限,一切权限动态加载,灵活配置 基本环境 spring-boot 2.1.7 mybatis-plus 2.1.0 mysql 5.7.24 redis 5.0.5 温馨小提示:案例demo源码附文章末尾,有需要的小伙伴们可参考哦 ~

Springmvc集成Shiro实现权限管理

Shiro是一个安全框架,他可以集成其他开发开发框架 如:Springmvc,实现用户身份认证.权限管理等等功能,shiro详细的介绍也就不讲了,这里给出一些关键的知识点吧: 知识点: shiro中默认的过滤器 过滤器名称 过滤器类 描述 anon org.apache.shiro.web.filter.authc.AnonymousFilter 匿名过滤器 authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter 如果继续