玩转SpringBoot之整合 shiro 权限框架

Spring Boot 集成权限管理Spring Security框架 Spring Security是Spring项目的一部分,专门为Java应用程序提供全面的安全服务。它可以帮助开发者实现各种安全需求,如身份验证、角色和权限管理、会话管理等。Spring Security提供了一种强大的和可高度自定义的权限管理方式,开发者可以根据业务需求定制权限规则,实现精细化的权限控制。要自定义Spring Security配置,需要创建一个配置类,该类需要继承WebSecurityConfigurerAdapter类,并覆盖其中的方法。 阅读详情

在实际项目中,经常需要用到角色权限区分,以此来为不同的角色赋予不同的权利,分配不同的任务。比如,普通用户只能浏览;会员可以浏览和评论;超级会员可以浏览、评论和看视频课等;实际应用场景很多。毫不夸张的说,几乎每个完整的项目都会设计到权限管理。

因此,这篇文章,阿淼就带大家将 shiro 权限框架整合到 SpringBoot 中,以达到快速的实现权限管理的功能。

序

在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是由于 Spring Security 过于庞大和复杂,只要能满足业务需要,大多数公司还是会选择 Apache Shiro 来使用。

一般来说,Spring Security 和 Shiro 的区别如下:

Spring SecurityApache Shiro
重量级的安全管理框架轻量级的安全管理框架
概念复杂,配置繁琐概念简单、配置简单
功能强大功能简单

这篇文章会首先带大家了解 Apache Shiro ,然后再给出使用案例 Demo。

走进 Apache Shiro

官网认知

照例又去官网扒了扒介绍:

Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications. Apache Shiro™是一个强大且易用的Java安全框架,能够用于身份验证、授权、加密和会话管理。Shiro拥有易于理解的API,您可以快速、轻松地获得任何应用程序——从最小的移动应用程序到最大的网络和企业应用程序。

简而言之,Apache Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理。

Shiro能到底能做些什么呢?

  • 验证用户身份
  • 用户访问权限控制,比如:1、判断用户是否分配了一定的安全角色。2、判断用户是否被授予完成某个操作的权限
  • 在非 Web 或 EJB 容器的环境下可以任意使用Session API
  • 可以响应认证、访问控制,或者 Session 生命周期中发生的事件
  • 可将一个或以上用户安全数据源数据组合成一个复合的用户 “view”(视图)
  • 支持单点登录(SSO)功能
  • 支持提供“Remember Me”服务,获取用户关联信息而无需登录 ···

为什么今天还要使用Apache Shiro?

对此,官方给出了详细的解释:shiro.apache.org/

自2003年以来,框架环境发生了很大变化,因此今天仍然有充分的理由使用Shiro。实际上有很多原因。Apache Shiro是:

  • 易于使用 -易于使用是该项目的最终目标。应用程序安全性可能非常令人困惑和沮丧,并被视为“必要的邪恶”。如果您使它易于使用,以使新手程序员可以开始使用它,那么就不必再痛苦了。
  • 全面 -Apache Shiro声称没有其他具有范围广度的安全框架,因此它可能是满足安全需求的“一站式服务”。
  • 灵活 -Apache Shiro可以在任何应用程序环境中工作。尽管它可以在Web,EJB和IoC环境中运行,但并不需要它们。Shiro也不要求任何规范,甚至没有很多依赖性。
  • 具有Web功能 -Apache Shiro具有出色的Web应用程序支持,使您可以基于应用程序URL和Web协议(例如REST)创建灵活的安全策略,同时还提供一组JSP库来控制页面输出。
  • 可插拔 -Shiro干净的API和设计模式使它易于与许多其他框架和应用程序集成。您会看到Shiro与Spring,Grails,Wicket,Tapestry,Mule,Apache Camel,Vaadin等框架无缝集成。
  • 受支持 -Apache Shiro是Apache Software Foundation(Apache软件基金会)的一部分,该组织被证明以其社区的最大利益行事。项目开发和用户群体友好的公民随时可以提供帮助。如果需要,像Katasoft这样的商业公司也可以提供专业的支持和服务。

Shiro 核心概念

Apache Shiro 是一个全面的、蕴含丰富功能的安全框架。

下图为描述 Shiro 功能的框架图:

如图所示,功能包括:

  • Authentication(认证):用户身份识别,通常被称为用户“登录”
  • Authorization(授权):访问控制。比如某个用户是否具有某个操作的使用权限。
  • Session Management(会话管理):特定于用户的会话管理,甚至在非web 或 EJB 应用程序。
  • Cryptography(加密):在对数据源使用加密算法加密的同时,保证易于使用。

并且 Shiro 还有通过增加其他的功能来支持和加强这些不同应用环境下安全领域的关注点。

特别是对以下的功能支持:

  • Web支持:Shiro 提供的 Web 支持 api ,可以很轻松的保护 Web 应用程序的安全。
  • 缓存:缓存是 Apache Shiro 保证安全操作快速、高效的重要手段。
  • 并发:Apache Shiro 支持多线程应用程序的并发特性。
  • 测试:支持单元测试和集成测试,确保代码和预想的一样安全。
  • "Run As":这个功能允许用户假设另一个用户的身份(在许可的前提下)。
  • "Remember Me":跨 session 记录用户的身份,只有在强制需要时才需要登录。

注意: Shiro 不会去维护用户、维护权限,这些需要我们自己去设计/提供,然后通过相应的接口注入给 Shiro

使用案例 Demo

1.新建 maven 项目

为方便我们初始化项目,Spring Boot给我们提供一个项目模板生成网站。

  • 1、打开浏览器,访问:start.spring.io/
  • 2、根据页面提示,选择构建工具,开发语言,项目信息等。

2.导入 springboot 父依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>
复制代码

3.相关 jar 包

web 包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
复制代码

shiro-spring 包就是此篇文章的核心

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.0</version>
</dependency>
shiro 注解会用到 aop
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
数据库相关包使用的是mybatisplus
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.12</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.1.0</version>
</dependency>
    <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>
复制代码

4.数据库

建表语句在项目中有,项目地址: github.com/mmzsblog/mm…

5.自定义 realm

public class MyShiroRealm extends AuthorizingRealm {
    @Autowired
    private UserService userService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private PermissionService permissionService;

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        // HttpServletRequest request = (HttpServletRequest) ((WebSubject) SecurityUtils
        // .getSubject()).getServletRequest();//这个可以用来获取在登录的时候提交的其他额外的参数信息
        String username = (String) principals.getPrimaryPrincipal();
        // 受理权限
        // 角色
        Set<String> roles = new HashSet<String>();
        Role role = roleService.getRoleByUserName(username);
        System.out.println(role.getRoleName());
        roles.add(role.getRoleName());
        authorizationInfo.setRoles(roles);
        // 权限
        Set<String> permissions = new HashSet<String>();
        List<Permission> querypermissions = permissionService.getPermissionsByRoleId(role.getId());
        for (Permission permission : querypermissions) {
            permissions.add(permission.getPermissionName());
        }
        authorizationInfo.setStringPermissions(permissions);
        return authorizationInfo;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)
            throws AuthenticationException {
        String loginName = (String) authcToken.getPrincipal();
        // 获取用户密码
        User user = userService.getOne(new QueryWrapper<User>().eq("username", loginName));
        if (user == null) {
            // 没找到帐号
            throw new UnknownAccountException();
        }
        String password = new String((char[]) authcToken.getCredentials());
        String inpass = (new Md5Hash(password, user.getUsername())).toString();
        if (!user.getPassword().equals(inpass)) {
            throw new IncorrectCredentialsException();
        }
        // 交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配
        SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(loginName, user.getPassword(),
                ByteSource.Util.bytes(loginName), getName());

        return authenticationInfo;
    }

}
复制代码

6.shiro 配置类

@Configuration
public class ShiroConfiguration {
    private static final Logger logger = LoggerFactory.getLogger(ShiroConfiguration.class);

    /**
     * Shiro的Web过滤器Factory 命名:shiroFilter
     */
    @Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // Shiro的核心安全接口,这个属性是必须的
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        //需要权限的请求,如果没有登录则会跳转到这里设置的url
        shiroFilterFactoryBean.setLoginUrl("/login.html");
        //设置登录成功跳转url,一般在登录成功后自己代码设置跳转url,此处基本没用
        shiroFilterFactoryBean.setSuccessUrl("/main.html");
        //设置无权限跳转界面,此处一般不生效,一般自定义异常
        shiroFilterFactoryBean.setUnauthorizedUrl("/error.html");
        Map<String, Filter> filterMap = new LinkedHashMap<>();
        // filterMap.put("authc", new AjaxPermissionsAuthorizationFilter());
        shiroFilterFactoryBean.setFilters(filterMap);
        /*
         * 定义shiro过滤链 Map结构
         * Map中key(xml中是指value值)的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的
         * anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种
         * authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.
         * FormAuthenticationFilter
         */
        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        /*
         * 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边; authc:所有url都必须认证通过才可以访问;
         * anon:所有url都都可以匿名访问
         */
        filterChainDefinitionMap.put("/login.html", "authc");
        filterChainDefinitionMap.put("/login", "anon");
        filterChainDefinitionMap.put("/js/**", "anon");
        filterChainDefinitionMap.put("/css/**", "anon");
        filterChainDefinitionMap.put("/logout", "logout");
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }

    /**
     * 权限管理
     */
    @Bean
    public SecurityManager securityManager() {
        logger.info("=======================shiro=======================");
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(MyShiroRealm());
        // securityManager.setRememberMeManager(rememberMeManager);
        return securityManager;
    }

    /**
     * Shiro Realm 继承自AuthorizingRealm的自定义Realm,即指定Shiro验证用户登录的类为自定义的
     */
    @Bean
    public MyShiroRealm MyShiroRealm() {
        MyShiroRealm userRealm = new MyShiroRealm();
        userRealm.setCredentialsMatcher(hashedCredentialsMatcher());
        return userRealm;
    }

    /**
     * 凭证匹配器 密码验证
     */
    @Bean(name = "credentialsMatcher")
    public HashedCredentialsMatcher hashedCredentialsMatcher() {
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        // 散列算法:这里使用MD5算法;
        hashedCredentialsMatcher.setHashAlgorithmName("md5");
        // 散列的次数,比如散列两次,相当于 md5(md5(""));
        hashedCredentialsMatcher.setHashIterations(1);
        // storedCredentialsHexEncoded默认是true,此时用的是密码加密用的是Hex编码;false时用Base64编码
        hashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);
        return hashedCredentialsMatcher;
    }

    /**
     * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager());
        return authorizationAttributeSourceAdvisor;
    }

}
复制代码

7.测试类

@RestController
public class UserController {
    @PostMapping("login")
    public String name(String username, String password) {
        String result = "已登录";
        Subject currentUser = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        if (!currentUser.isAuthenticated()) {
            try {
                currentUser.login(token);// 会触发com.shiro.config.MyShiroRealm的doGetAuthenticationInfo方法
                result = "登录成功";
            } catch (UnknownAccountException e) {
                result = "用户名错误";
            } catch (IncorrectCredentialsException e) {
                result = "密码错误";
            }
        }
        return result;
    }

    @GetMapping("logout")
    public void logout() {
        Subject currentUser = SecurityUtils.getSubject();
        currentUser.logout();
    }

    @RequiresPermissions("role:update")
    @GetMapping("/role")
    public String name() {
        return "hello";
    }

    @RequiresPermissions("user:select")
    @GetMapping("/role2")
    public String permission() {
        return "hello sel";
    }

}
复制代码

7.1 登录测试

数据库账号(密码经过md5加盐加密)

数据库账号

 

 

账号错误测试

 

 

 

密码错误测试

 

 

 

 

7.2 权限测试

权限测试1

 

 

权限测试2

 

 

8.说明

8.1 无权限时的处理

无权限时自定义了一个异常。所以,权限测试的时候没有权限就会提示配置的提示语 “没有权限”。

@ControllerAdvice
public class ShiroException {
    @ExceptionHandler(value = UnauthorizedException.class)
    @ResponseBody
    public String name() {
        return "没有权限";
    }
}
复制代码

8.2 角色权限测试与权限测试相同

权限设置可在shiro配置类中shiro过滤链设置,也可用注解方式设置,本文使用注解方式。

8.3 shiro 的 session 和 cache

shiro 的 session 和 cache 管理可以自定义,本文用的是默认的,推荐自定义,方便管理。

小结

  • Apache Shiro是Java的一个安全框架
  • Shiro是一个强大的简单易用的Java安全框架,主要用来更便捷的认证、授权、加密、会话管理、与Web集成、缓存等
  • Shiro使用起来小而简单
  • spring中有spring security ,是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。
  • shiro不依赖于spring,shiro不仅可以实现web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,
  • shiro属于轻量框架,越来越多企业项目开始使用shiro.

参考:www.cnblogs.com/joker-dj/ar…

你们的 【三连】 就是小编创作的最大动力,如果本篇博客有任何错误和建议,欢迎大家留言!

 

SpringBoot校园二手市场毕设实战:从数据库设计到部署全流程解析 在Java Web开发领域,SpringBoot作为主流的后端框架,以其开箱即用和约定大于配置的特性,极大地简化了企业级应用的构建流程。其核心原理在于通过自动配置和起步依赖,快速整合Web、数据访问、安全等模块,使开发者能聚焦于业务逻辑实现。这一技术价值在于提升了开发效率,降低了项目启动门槛,尤其适合快速构建原型和中小型项目。在电商、内容管理等典型应用场景中,SpringBoot常与MyBatis、MySQL等技术栈协同,实现高内聚、低耦合的系统架构。本文以校园二手市场这一经典毕业设计选题为例,深入剖析如何 阅读详情

相关推荐

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 390

shiro授权和认证(三)

1、过滤器授权 1、在realm中查询用户的权限和角色放到缓存中 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { //第一步:先获取用户名 User user= (User) principalCollection.getPrimaryPrincipal(); //第二步:通过用户名查询数据库

weixin_46403305的博客 1343

保姆级教程:用微信小程序+OneNet MQTT API,5分钟搞定温湿度数据实时展示

本文提供了一份详细的教程,教你如何利用微信小程序和OneNet MQTT API在5分钟内实现温湿度数据的实时展示。从OneNet平台配置到小程序数据绑定,手把手指导零基础开发者快速搭建监控系统,涵盖API调用、数据解析和界面设计等关键步骤。

weixin_30298497的博客 370

Shiro源码分析④ :鉴权流程

一、前言 由于之前没有使用过 Shiro,最近开始使用,故对其部分流程和源码进行了阅读,大体总结了一些内容记录下来。本系列并不会完完全全分析 Shiro 的全部代码,仅把主(我)要(用)流(到)程(的) 简单分析一下。由于本系列大部分为个人内容理解 并且 个人学艺实属不精,故难免出现 “冤假错乱”。如有发现,感谢指正,不胜感激。 二、FormAuthenticationFilter 三、流程 org.apache.shiro.web.filter.AccessControlFilter#onPreHand

猫吻鱼的博客 2621

图形引擎实战:镭射效果制作分享

该方案的优势1.遵循物理的2.可以使用少量的参数去调控镭射的效果。计算相对简单,缺点仍是颜色不能够自定义,还有一种常见的方案是采样一张镭射贴图来模拟,好处是颜色可以自定义同时性能上还很高效没有复杂的公式计算。我查阅了网上普遍的方案,常见的做法是制作一个Ramp图生成工具,然后将生成好的ramp图赋给材质。这两个方案的好处是美术同学可以手动的去控制镭射的颜色。最后就是Shader中对Ramp图的采样的部分,Ramp图的UV坐标是使用fresnel作为Ramp的U轴坐标,0.5作为V轴坐标。

qq_41166022的博客 1353

SOLIDWORKS转CAD字体终极选择:TrueType vs SHX,哪个才是你图纸协作的“安全牌”?

本文深入探讨SOLIDWORKS转CAD工程图中的字体选择问题,对比TrueType与SHX字体在DWG文件协作中的表现。通过真实案例揭示字体映射的兼容性陷阱,提供企业级字体管理方案,帮助工程师规避版本差异、系统依赖和法律风险,确保图纸协作的稳定性。

weixin_34233974的博客 265

springboot2.0整合shiro攻略

Shiro是什么 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。简单的讲,Shiro是一个Java平台的开源权限框架,用于认证和访问授权。 Shiro三个核心组件 Subject, SecurityManager 和 R...

★【World Of Moshow 郑锴】★ 1万+

FPGA编译加速实战:6大可落地的Vivado优化策略

FPGA编译本质上是NP-hard约束满足问题求解,而非传统软件编译;Vivado作为时序驱动的硬件实现工具链,其耗时瓶颈集中在Implementation阶段的布局布线(PnR)与逻辑优化。理解这一原理,才能跳出‘加线程’‘升版本’等表面优化,转向精准时序约束、增量编译、物理锚点控制、IP配置精简等工程级干预。这些技术手段直接作用于Vivado的Tcl执行流与底层求解空间,显著压缩搜索范围、减少无效迭代——尤其适用于Zynq/UltraScale等中大型项目(LUT > 80K、多时钟域、DDR/PCIe

weixin_34226182的博客 413

Shiro框架常用配置

Shiro框架常用配置

weixin_55229531的博客 5万+

杰理AC695N芯片跑iic接口的oled驱动分享

本文介绍了一个基于IIC接口的0.96寸OLED显示屏驱动程序,适用于SSD1306控制器。驱动采用软件模拟IIC方式,支持字符、数字、字符串、汉字和图片显示,测试平台为杰理AC695N系列芯片。硬件参数包括128×64分辨率,IIC接口(地址0x78),使用IO_PORTA_02(SDA)和IO_PORTA_03(SCL)引脚。驱动包含OLED主文件(oled.c/h)、软件IIC实现(soft_iic.c/h)和字体/图片数据文件(oledfont.h/bmp.h),可通过修改soft_iic.h中的引

qq_42014563的博客 882

[QMT量化交易小白入门]-三十四、让deepseek分析北京炒家的首板策略后,在打板前增加了选股范围(量化python代码解析)

print(f'开始盘前选股')这行代码定义了一个名为的函数,当调用这个函数时,会首先打印出“开始盘前选股”的信息,表明选股流程正式启动。1、可根据情况增删部分条件,目前盘前选股目前可以选出140多支,比之前全市场监听带宽压力小了很多。2、还可以自行添加其他选股条件,比如换手率计算,炸板可能性检测。3、xtdata的数据是有可能缺失的,自己写策略时,有可能需要剔除,或者从第三方库校正,比如部分股票的流通股数。

木头大左的博客 2699

玩转 SpringBoot2.x 之整合 shiro 权限框架

阅读正文: 序 在实际项目中,经常需要用到角色权限区分,以此来为不同的角色赋予不同的权利,分配不同的任务。比如,普通用户只能浏览;会员可以浏览和评论;超级会员可以浏览、评论和看视频课等;实际应用场景很多。毫不夸张的说,几乎每个完整的项目都会设计到权限管理。 在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是由于 Spring Security 过于庞大和复杂,只要能满足业务需要,大多数公司还是会选择 Apache Shiro 来使用。 一般来说,Spri

m0_68064743的博客 355

黑猫带你学eMMC协议第22篇:emmc可靠写详解(Write Reliability)

1 前言 1.1 声明 本文依据eMMC JEDEC5.1、网络资料及个人工作经验整理而成,如有部分错误请留言。 本文部分内容可能源自网络,侵删。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 1、什么是可靠性写属性(Write Reliability)? 2、可靠写和普通的写有什么区别? 3、设置可靠写的流程及流程框图。 4、可靠写需要遵循哪些规则? 1.3 参考链接 本文主要参考链接:http://www.up48.com/cn/support/8_37.html 2 什么

黑猫奥利奥的博客 3123

赋予建表权限_玩转SpringBoot之整合 shiro 权限框架

在实际项目中,经常需要用到角色权限区分,以此来为不同的角色赋予不同的权利,分配不同的任务。比如,普通用户只能浏览;会员可以浏览和评论;超级会员可以浏览、评论和看视频课等;实际应用场景很多。毫不夸张的说,几乎每个完整的项目都会涉及到权限管理。因此,这篇文章,阿淼就带大家将 shiro 权限框架整合到 SpringBoot 中,以达到快速的实现权限管理的功能。序在 Spring Boot 中做权限管理...

weixin_35572363的博客 114

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

玩转Springboot

有关于springboot的架构集成redis缓存,shiro权限控制,mq的消息队列,thymeleaf模板配置,json传值1.先看一下pom.xml文件&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www....

优快云新星计划JAVA赛道TOP5、优快云内容合伙人、JAVA领域优质创作者、资深JAVA开发深耕JAVA领域。 557

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【玩转Docker容器 3】基于Docker部署SpringBoot项目

Docker部署SpringBoot提供一个简单的项目1.修改application.yml或者application.properties文件2.打包成jar包3.上传项目到linux中4. 制作Docker镜像5.创建Docker容器6.启动自己创建的Docker容器7.外网访问项目8.测试项目 提供一个简单的项目 有的话就可以自己部署自己的项目 我这里提供一个简单的基于SpringBoot...

小杰爱吃蛋的博客 1823

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

想要玩转Spring全家桶?Alibaba全家桶了解一下?

在传统的Java编程中,当需要用到某个对象的时候,我们都是主动显式创建一个对象实例(new)。使用Spring后就不需要这样做了,因为Spring会帮我们在需要用到某些对象的地方自动注入该对象,而无须我们自己去创建。其实Spring给我们提供了一个IOC容器,里面管理着所有我们需要的对象,组件注册就是我们去告诉Spring哪些类需要交给IOC容器管理。所谓Spring Bean的生命周期指的是Bean从创建到初始化再到销毁的过程,这个过程由IOC容器管理。需要获取文章中的资料的小伙伴,记得一件三连哦。

2401_85763924的博客 963

获取当前ip spring_想要玩转Spring全家桶?Alibaba全家桶了解一下?

想要玩转Spring全家桶?Alibaba全家桶了解一下?这份资料,足以让你循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2等等核心知识点!并且这份文档是可以免费的分享给有需要的小...

weixin_36254379的博客 122

零基础玩转若依Plus:AI助手带你快速上手

如果刚接触JavaWeb开发,强烈建议先用这个方式建立整体认知,再深入细节。我的博客项目从零到上线只用了3小时,这在传统开发环境下根本不敢想。的AI辅助功能后,发现新手也能轻松做出一个带完整增删改查的博客系统。分享我的学习路线,全程不用硬啃文档,特别适合小白入门。最近想学若依Plus框架开发,但网上教程要么太零散,要么门槛太高。用平台集成的MySQL工具执行建表SQL,比本地装数据库方便多了。1. 遇到问题随时问右侧的Kimi助手,比百度效率高。2. 一键部署能生成临时访问链接,方便给朋友演示效果。

OnyxPanther23的博客 870

ARMxy模块化控制器:储能与自动化项目控制层硬件选型与部署实践

在工业自动化与分布式能源项目中,PLC、网关与工控机三件套架构面临柜内空间紧张、协议碎片化、运维割裂等痛点。模块化工业控制器通过核心板加扩展底板设计,将逻辑控制、协议转换与边缘计算整合于单一平台,支持Modbus、OPC UA、CAN等主流协议及私有协议软件解析,实现按需配置IO与统一运维。其技术价值在于降低硬件采购与调试成本、提升协议适配灵活性,适用于储能EMS、光伏监控、充电桩管理及设备数据采集等场景。本文从实际项目落地角度,拆解选型逻辑、架构设计、协议对接与部署调试环节,为工程师提供参考。

weixin_33801856的博客 401

spring cloud全家桶_想要玩转Spring全家桶?Alibaba全家桶了解一下?

想要玩转Spring全家桶?Alibaba全家桶了解一下?这份资料,足以让你循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2等等核心知识点!并且这份文档是可以免费的分享给有需要的小...

weixin_39804329的博客 198

福利:Java技术栈教程

分布式教程Duboo+Zookeeper GitHub路径: https://github.com/jitwxs/e3mall 教程说明: https://blog.youkuaiyun.com/yuanlaijike/article/details/79654183 京东solr搜索框架 教程 https://blog.youkuaiyun.com/cs_hnu_scw/artic...

Carson073的博客 305

精品java学习资源推荐Spring技术栈、秒杀、限时抢购等各种主流技术学习资源,持续更新中

学习资源非常多都是免费的,可以直接B站搜索"xiaochen2018",更新大量java前沿技术,话不多说 目录直通车 RabbitMQ最新版本的3.3.7版本使用,已更新 springboot 2.2.x 官方最新版本使用,正在更新 springboot 1.5.x 曾经最火的版本 spring cloud G版本最新版本使用,正在更新中 从零带你学IDEA,精通实战技巧 面试被问惨的秒杀系统...

小陈之JAVA 1315
上一篇: 还在手动部署SpringBoot应用?试试这个自动化插件!
下一篇: 我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值