springboot+shiro入门学习(二)

SpringBoot整合Shiro Shiro是一个开源的Java安全框架,它提供了身份认证、授权、加密和会话管理等功能,可以帮助我们快速地构建安全可靠的应用程序。 阅读详情

上一篇简单学习了一下shiro。这篇我们整合springboot和shiro

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.shiro</groupId>
	<artifactId>shiro</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>springFreemarker-1</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency> -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		
		<!-- shiro相关jar -->
	    <dependency>
	      <groupId>org.apache.shiro</groupId>
	      <artifactId>shiro-core</artifactId>
	      <version>1.2.1</version>
	    </dependency>
	    <dependency>
	      <groupId>org.apache.shiro</groupId>
	      <artifactId>shiro-web</artifactId>
	      <version>1.2.1</version>
	    </dependency>
	    <dependency>
	      <groupId>org.apache.shiro</groupId>
	      <artifactId>shiro-ehcache</artifactId>
	      <version>1.2.1</version>
	    </dependency>
	    <dependency>
	      <groupId>org.apache.shiro</groupId>
	      <artifactId>shiro-spring</artifactId>
	      <version>1.2.1</version>
	    </dependency>
	    
	    <!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
		    <groupId>junit</groupId>
		    <artifactId>junit</artifactId>
		    <version>4.12</version>
		    <scope>test</scope>
		</dependency>
	    
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

shiro配置类

/**
 * 
 */
package shiro.config;

import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.Filter;

import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
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.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

import shiro.realm.MyRealm;

/**
 * @author JXQ
 * shiro配置类
 */
@Configuration
public class ShiroConfig {

	
	/**
	   *  核心的安全事务管理器
	 * @return
	 */
	@Bean
	public SecurityManager securityManager() {
		DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
		securityManager.setRealm(myRealm());
		
		return securityManager;
	}
	
	/**
	   *   注入自定义的realm
	 * @return
	 */
	@Bean
	public MyRealm myRealm() {
		MyRealm realm = new MyRealm();
		realm.setCredentialsMatcher(hashedCredentialsMatcher());
		return realm;
	}
	
	@Bean
	public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
		ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
		
		//设置安全管理器
		shiroFilterFactoryBean.setSecurityManager(securityManager);
		
		//默认跳转到登陆页面
        //shiroFilterFactoryBean.setLoginUrl("/login");
        //登陆成功后的页面
        //shiroFilterFactoryBean.setSuccessUrl("/index");
        //shiroFilterFactoryBean.setUnauthorizedUrl("/403");
		
		Map<String,Filter> filterMap = new LinkedHashMap<>();
		shiroFilterFactoryBean.setFilters(filterMap);
		
		//权限控制map
        Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
        
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
	}
	
	/**
	   *  哈希密码比较器,在realm中作用参数使用
	   *  登陆时会比较用户输入的密码,跟数据库密码配合盐值salt解密后是否一致。
	 * @return
	 */
	@Bean
	public HashedCredentialsMatcher hashedCredentialsMatcher() {
		HashedCredentialsMatcher macher = new HashedCredentialsMatcher();
		macher.setHashAlgorithmName("md5");
		macher.setHashIterations(1);
		return macher;
	}
	
	/**
	   * 开启shiro aop注解支持
	 * @param securityManager
	 * @return
	 */
	@Bean
	public AuthorizationAttributeSourceAdvisor advisor(SecurityManager securityManager) {
		AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
		authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
	}
	
	
	/**
	 * Shiro生命周期处理器
	 * @return
	 */
	@Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
        return new LifecycleBeanPostProcessor();
    }
	
	/**
            * 自动创建代理
     * @return
     */
    @Bean
    @DependsOn({"lifecycleBeanPostProcessor"})
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        advisorAutoProxyCreator.setProxyTargetClass(true);
        return advisorAutoProxyCreator;
    }
}

自定义的Realm类:

/**
 * 
 */
package shiro.realm;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

/**
 * @author JXQ
 *
 */
public class MyRealm extends AuthorizingRealm{

	Map<String, String> map = new HashMap<String, String>();
	
	{
		map.put("admin", "123456");
		super.setName("MyRealm");//这个名字可以随便取
	}
	
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		//从主体传过来的认证信息中获取用户名
		String userName = (String)principals.getPrimaryPrincipal();
		
		//模拟从数据库获取角色和权限
		Set<String> roleSet = getRoleByUserName(userName);
		Set<String> permissionSet = getPermissinByUserName(userName);
		
		SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
		authorizationInfo.addRoles(roleSet);
		authorizationInfo.addStringPermissions(permissionSet);
		return authorizationInfo;
	}


	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		
		//从主体传过来的认证信息中获取用户名
		String userName = (String)token.getPrincipal();
		
		//根据用户名获取密码,模拟从数据库获取
		//String password = getPassWord(userName);
		/*
		 * if(password == null) { return null; }
		 */
		Md5Hash password = new Md5Hash("123456", "TEST");
		SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(userName, password,ByteSource.Util.bytes("TEST") ,"MyRealm");
		
		return simpleAuthenticationInfo;
	}

	private String getPassWord(String userName) {
		String password = map.get(userName);
		return password;
	}
	
	/**
	 * 从数据库获取角色
	 * @param userName
	 * @return
	 */
	private Set<String> getRoleByUserName(String userName) {
		Set<String> set = new HashSet<String>();
		set.add("admin");
		set.add("aaaaa");
		return set;
	}
	
	private Set<String> getPermissinByUserName(String userName) {
		Set<String> set = new HashSet<String>();
		set.add("user:delete");
		set.add("user:update");
		return set;
	}
}

Controller类:

/**
 * 
 */
package shiro.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author JXQ
 * 
 */
@RestController
@RequestMapping(value = "test")
public class TestController {
	
	@RequestMapping(value = "admin")
	@RequiresPermissions("user:delete")
	public String admin() {
		return "测试成功";
	}
	
	@RequestMapping(value = "login")
	public String login(String userName, String password) {
		Subject subject = SecurityUtils.getSubject();
		UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
		subject.login(token);
		return "登录成功";
	}
}

在使用postman测试之前一定要先调用login。不然会出错。我们在set中设置了用户拥有user:delete权限和user:update权限

而访问admin方法需要user:delete权限。发现能够正确的访问。

修改访问admin方法需要的权限为:user:view

会发现报错信息为:

Not authorized to invoke method: public java.lang.String shiro.controller.TestController.admin()

其实这是没有配置没有权限时的访问路径。

shiro的自定义过滤器

package shiro.filter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;

public class ShiroFilter extends AuthorizationFilter{

	@Override
	protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object o)
			throws Exception {
		
		Subject subject = getSubject(request, response);
		
		String[] roles = (String[])o;//需要的权限
		if(null == roles || roles.length == 0) {
			//说明不需要任何权限就可以访问
			return true;
		}
		for(String role : roles) {
			if(subject.hasRole(role)) {
				return true;
			}
		}
		return false;
	}

}

 修改shiroConfiguration文件:

@Bean
	public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
		ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
		
		//设置安全管理器
		shiroFilterFactoryBean.setSecurityManager(securityManager);
		
		//默认跳转到登陆页面
        //shiroFilterFactoryBean.setLoginUrl("/login");
        //登陆成功后的页面
        //shiroFilterFactoryBean.setSuccessUrl("/index");
        //shiroFilterFactoryBean.setUnauthorizedUrl("/index.ftl");
		
		Map<String,Filter> filterMap = new LinkedHashMap<>();
		
		filterMap.put("url", new ShiroFilter());
		shiroFilterFactoryBean.setFilters(filterMap);
		
		//权限控制map
        Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
        
        filterChainDefinitionMap.put("/test/admin", "url[admin,admin1]");
        //filterChainDefinitionMap.put("/test/admin", "url");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
	}

这个过滤器的意思是:当我们的admin方法访问需要的角色为admin或者admin1时,都可以访问这个方法。

Springboot整合Shiro之授权   本文我们来介绍SpringBoot整合Shiro来实现授权的操作 一、注解的使用方式 1.配置类修改   在权限校验的时候,我们一般在控制中通过注解来实现权限的校验,但我们需要放开注解的使用,在配置文件中的使用方式如下: 对应的在配置类中的设置如下: /** * 开启授权注解使用方式 * @param manager * @return */ @Bean public Authori... 阅读详情

相关推荐

Shiro教程(二):Springboot整合Shiro全网最全教程

Apache Shiro是一个Java的安全权限框架。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。- Shiro可以完成认证、授权、加密、会话管理、Web集成、缓存等。这里是SpringBoot整合Shiro最完整最详细教程。

WwLK123的博客 2113

SpringBoot+Shiro学习(二):逻辑介绍

我们先写一个简单的登录认证。 //创建一个默认SecurityManager DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager(); //创建一个自定义Realm对象 CustomRealm realm = new CustomRealm(); //将自定义Realm注入到SecurityManag...

weixin_34329187的博客 119

AUTOSAR/汽车行业

AUTOSAR架构及汽车产业链相关介绍

m0_54254513的博客 1万+

springboot结合shiro入门学习(二)

上一篇简单学习shiro的认证。这一篇主要是结合数据库来整合springboot和shiro 整体项目结构 首先我们在pom添加mybatis <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-sp...

qq_36470898的博客 296

Cadence IC5141保姆级教程:Bandgap电路四大仿真(稳定性/噪声/启动/PSRR)完整流程与调参心得

本文提供Cadence IC5141中Bandgap电路的四大仿真(稳定性仿真、噪声仿真、启动仿真、PSRR仿真)的完整流程与调参心得。从原理图检查到ADE L配置,详细解析各仿真步骤的关键参数设置与优化策略,帮助工程师高效完成电路设计与性能调优。

weixin_30399821的博客 1650

微信小程序订阅消息实战:如何绕过长期订阅限制实现多次发送(附PHP代码)

本文针对微信小程序开发者无法获取长期订阅消息权限的痛点,提供了一套完整的实战解决方案。通过深入剖析一次性订阅与长期订阅的规则差异,结合巧妙的交互设计、稳健的PHP服务端发送引擎(含高并发处理与失败重试机制)以及授权池管理等高级策略,帮助开发者在合规前提下,构建高可用的消息推送系统,有效提升通知触达率与用户体验。

weixin_29008805的博客 620

Springboot整合Shiro框架入门

Springboot中集成Shiro框架1、快速开始demo2、Springboot集成Shiro2.1、环境搭建2.2、shiro的拦截2.3、shiro的认证2.4、整合mybatis2.5、shiro进行授权2.6、shiro整合thymeleaf 1、快速开始demo 来到shiro的官网:shiro官方网站: 下载官方在git仓库上提供的源码,下载后解压: 官方提供了在多种场景下使用的demo,等一下会用到sample里面的东西。下面直接按官方推荐的10分钟入门demo进行测试。 创建一

qq_42640067的博客 2152

具身智能中的运动控制如何入门?

本文提出计算机视觉(CV)与强化学习(RL)结合的机器人运动控制学习路径。强调工程实践导向,建议采用"算法-机器人-工程"三阶段学习法:基础阶段掌握RL核心算法(PPO/SAC)和机器人动力学;进阶阶段聚焦Sim2Real技术(域随机化、模仿学习)和仿真环境搭建;深耕阶段结合CV优势开发视觉闭环控制等创新方向。特别指出应避免纯理论学习,提倡"最小知识原则"的实践模式,通过具体项目(如四足机器人控制)串联知识体系。推荐以《现代机器人学》等工具书为参考,配合开源框架(Pi

CyberSoma的博客 320

SpringBoot搭建Shiro的快速入门

章节目录1. Shiro1.1 Shiro简介1.2 Shiro三大核心组件1.2.1 Subject1.2.2 SecurityManager1.2.3 Realm1.3 Shiro的认证和授权流程1.3.1 认证流程1.3.2 授权流程2. SpringBoot集成Shiro并完成登录操作2.1 集成Shiro 1. Shiro Shiro官网 1.1 Shiro简介 以下为Shiro的简单介绍: Shiro 是一个强大、简单易用的 Java 安全权限框架 Shiro 可以非常容易的开发出足够好的应用

菩提小猿的博客 1717

SAP-QM-质检操作

SAP-QM-质检操作

yanzibing99的博客 8176

MFC Tab Control控件完全指南:从基础使用到高级定制

本文详细介绍了MFC中TabControl控件的使用方法和高级技巧。主要内容包括:1) TabControl基础属性设置与绑定;2) 样式定制和外观自定义;3) 创建派生类实现扩展功能;4) 动态页面管理和子对话框控制;5) 高级功能如标签拖拽排序和右键菜单。通过完整代码示例,展示了从基本应用到复杂场景的实现方案,包括多标签页管理、自定义绘制、动态添加/删除标签等核心功能,为MFC开发者提供了全面的TabControl开发指南。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 257

SpringBoot整合Shiro框架

目录 1、Shiro简介 1.1、Shiro是什么? 1.2、有哪些功能? 1.3、Shiro架构(外部) 2、快速入门(QuickStartShiro) 2.1、项目结构 2.2、导入shiro依赖,这是我的pom所有依赖。(pom.xml) 2.3、相关配置文件 (1)log4j.properties——官网 (2)shiro.ini——官网 (3)启动类 Quickstart——官网 3、SpringBoot集成Shiro框架 3.1SpringBoot整合Shir...

koko创作 8906

全覆盖路径规划开源项目Clean-robot-turtlebot3关键函数解析(下)

本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。

慕羽★的博客 2298

Springboot整合shiro

是一款主流的Java安全框架,不依赖任何容器,可以运行在Java SE和Java EE项目中,它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。Shiro 就是用来解决安全管理的系统化框架。Shiro是基于session的身份认证和访问控制框架。RBAC是Role-Based Access Control(基于角色的访问控制)的缩写。它是一种广泛应用于安全管理中的访问控制模型。RBAC模型通过授予用户不同的角色,并将角色与权限进行关联,来管理对资源的访问。

chao的博客 2797

极智AI | 谈谈为什么卷积加速更喜欢 NHWC Layout

本文主要讨论一下为什么卷积加速更加喜欢 NHWC 的数据排布。

极智视界 2970

精雕软件(JDpaint) 5.5 绿色版

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

Shiro入门学习(整合SpringBoot)

Apache Shiro是Java的一个安全(权限)框架 可以完成:认证、授权、加密、会话管理、与Web集成和缓存等 用户登录时把身份信息(用户名/手机号/邮箱地址等)和凭证信息(密码/证书等)封装成一个Token令牌,通过安全管理器中的认证器进行校验,成功则授权以访问系统 shiro三大功能模块 Subject:主体,一般指用户。 SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件。(类似于SpringMVC中的DispatcherServlet) Rea.

qq_25046827的博客 4745

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Springboot学习】Shiro快速入门及与SpringBoot集成

目录1、Shiro简介1.1、Shiro 是什么?1.2、有哪些功能?1.3、Shiro架构(外部)1.4、Shiro架构(内部)2、Hello World2.1、快速实践3、SpringBoot集成3.1、SpringBoot整合Shiro环境搭建3.2、Shiro实现登录拦截3.3、Shiro实现用户认证3.4、Shiro整合Mybatis3.5、Shiro实现用户授权3.6、Shiro整合Thymeleaf3.7、所有代码4、完美的解释 1、Shiro简介 1.1、Shiro 是什么? Apach

胡毛毛的博客 1724

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Shiro学习笔记_04:Shiro整合springboot之 thymeleaf权限控制

Shiro 学习笔记 本文基于B站UP主【编程不良人】视频教程【2020最新版Shiro教程,整合SpringBoot项目实战教程】进行整理记录,仅用于个人学习交流使用。 视频链接:https://www.bilibili.com/video/BV1uz4y197Zm 官方文档:http://www.baizhiedu.xin 目录标题Shiro 学习笔记七、Shiro整合springboot之thymeleaf权限控制1.引入扩展依赖2.页面中引入命名空间3.常见权限控制标签使用4.加入shiro的方

耿鬼不会笑的博客 4228

springboot+shiro处理shiro中的异常

1.自定义realm中抛出异常信息 /** * @description:自定义Realm * @author: Administrator * @date: 2019-03-27 13:30 */ @Component public class MyRealm extends AuthorizingRealm { public static Log log = LogFacto...

大海无量的博客 6723

【SpringBoot】Shiro快速入门(精讲)

Apache Shiro 是一个java的安全(权限)框架 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaEE环境中,也可以用在JavaSE环境中 Shiro可以完成认证、授权、加密、会话管理、web集成、缓存等。 ...

✈ 正在努力 の 寒江(StudiousTiger) ✌ 呐 ✈ 1464

springboot整合shiro 入门学习

dependency: <!-- Subject 用户 SecurityManager 管理所有用户 Realm 连接数据 --> <!--shrio整合spring的包 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> &l

weixin_39525744的博客 228

Shiro框架学习及SpringBoot与Shiro的整合

文章目录1.Cookie,Session,Tokenhttp无状态cookiesessiontoken总结如何保证token的安全性?Token授权机制:时间戳超时机制:签名机制:拒绝重复调用(非必须)2.Shiro1.什么是权限管理?2.什么是Shiro?2.1shiro特性,功能2.2外部结构来看:2.3 核心架构3. 认证3.1 认证的三个关键对象3.2 认证的开发4. 使用MD5和salt5.授权5.1 关键对象5.2 授权流程5.3 授权方式5.4 权限字符串5.5 授权编程实现方式5.6 开发授

qq_40996976的博客 1594

Springboot使用shiro

一、什么叫Aop Aop 作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务器,如事务管理,安全检查,缓存检查,对象池管理等 Aop 实现的关键就在于代理的实现,代理分为动态代理与静态代理.动态代理是指在运行时借助JDK动态代理、CGLIB等在内存中“临时”生成Aop动态代理类,被称为运行时增强。 ...

qq_38345598的博客 4112

Shiro入门(整合springboot)

Shiro入门 1. 概念 Apache Shiro是一个java的安全(权限)框架,可以非常容易地开发出足够号地应用,其不仅可以用在JAVASE环境,也可以用在JAVAEE环境,可以完成认证、授权、加密、会话管理、web集成、缓存等; 三大组件 Subject:代表当前主体,与当前应用交互的任何东西都是subject; SecurityManager:安全管理器,所有有关安全的操作均与此有关。是shiro核心,负责与其他组件交互; Realm:Shiro 从 Realm 获取安全数据(如用户、角

weixin_41961894的博客 169
上一篇: springboot+shiro入门学习(一)
下一篇: springboot+shiro入门学习(三)setUnauthorizedUrl的设置
若往夕之
博客等级 码龄9年 20粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值