我的shiro之旅: 五 shiro与普通web项目集成

单点登录cas与权限管理框架shiro集成------普通web项目方式 由于项目需要做权限管理的功能,最先想到的是spring security,它是个功能强大的安全管理框架,不过它的复杂性和学习曲线之曲折让人生畏,转而寻求其它解决方案,知道另外一个项目组的人使用shiro做权限管理后就了解了下这个框架,发现比spring security简洁多了,于是就打算使用这个框架,首先嘛,当然是要和现在的系统进行集成,现在系统采用cas来做登录验证,所以先把cas和shiro 阅读详情

博客已移至 http://blog.gogl.top

在第二篇文章讲了shiro与web项目集成,其中只要是与spring项目的集成。公司有些旧项目,是用servlet写的,并不适合用第二篇文章去搭建shiro。这里想讲讲shiro与普通的项目集成。与普通的web项目集成,shiro只需要两个依赖包,在项目的pom.xml下加入以下依赖:

 

		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-core</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-web</artifactId>
			<version>1.2.2</version>
		</dependency><dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-core</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-web</artifactId>
			<version>1.2.2</version>
		</dependency>


在项目的web.xml加入shiro的listener

 

 

	<context-param>
		<param-name>shiroConfigLocations</param-name>
		<param-value>classpath:META-INF/shiro/shiro.ini</param-value>
	</context-param>

	<listener>
		<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
	</listener>
	
	<filter>
		<filter-name>ShiroFilter</filter-name>
		<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>ShiroFilter</filter-name>
		<url-pattern>*.html</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping><context-param>
		<param-name>shiroConfigLocations</param-name>
		<param-value>classpath:META-INF/shiro/shiro.ini</param-value>
	</context-param>

	<listener>
		<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
	</listener>
	
	<filter>
		<filter-name>ShiroFilter</filter-name>
		<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>ShiroFilter</filter-name>
		<url-pattern>*.html</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping>


上面配置了shiro.ini文件在classpath的META-INF/shiro目录下。shiro.ini内容如下:

 

 

 

# =======================
# Shiro INI configuration
# =======================

[main]
myRealm = com.neting.security.infrastructure.shiro.ShiroRealm

securityManager.realm = $myRealm

authc.loginUrl = /security/login.html
authc.successUrl = /home.html
roles.unauthorizedUrl = /security/unauthorized.html
perms.unauthorizedUrl = /security/unauthorized.html

#myFilter
anyRoles = com.neting.security.interfaces.filter.AnyRolesAuthorizationFilter
anyPerms = com.neting.security.interfaces.filter.AnyPermissionsAuthorizationFilter

[users]

[roles]

[urls]
/admin=anyRoles[A,B],anyPerms["admin:a","admin:b"]
/** = anon


其中myRealm是自己写的realm,下面会给出代码,anyRoles,anyPerms为自定义的filter,上一篇文章已经讲过。

 

realm的代码如下,跟与spring项目集成的一样:

 

/**
 * @author Dylan
 */
public class ShiroRealm extends AuthorizingRealm{

	private final static Logger LOG = LoggerFactory.getLogger(ShiroRealm.class);
	
	private UserService userService = UserServiceImpl.getInstance();
	
	public ShiroRealm() {
		setName("ShiroCasRealm"); // This name must match the name in the User
		// class's getPrincipals() method
	//	setCredentialsMatcher(new Sha256CredentialsMatcher());
	}
	
	/**
	 * 认证
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
		
		UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
		String username = token.getUsername();
		try {
			if(StringUtils.isBlank(username)){
				throw new AccountException("can not handle this login");
			}
			User user = userService.getByUsername(username);
			checkUser(user, username);
			return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
		} catch (Exception e) {
			throw translateAuthenticationException(e);
		}
	}
	
	/**
	 * 授权
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		
		String username = (String)getAvailablePrincipal(principals);
		User user = userService.getByUsername(username);
		
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
		Set<String> rolesAsString = user.getRolesAsString();
		info.addRoles(rolesAsString);
		if(user.hasAuths()){
			info.addStringPermissions(user.getAuthAsString());
		}
		for(Role role : user.getRoles()){
			info.addStringPermissions(role.getAuthsAsString());
		}
		return info;
	}

	/**
	 * 异常转换
	 * @param e
	 * @return
	 */
	private AuthenticationException translateAuthenticationException(Exception e) {
		if (e instanceof AuthenticationException) {
			return (AuthenticationException) e;
		}
		if(e instanceof DisabledAccountException){
			return (DisabledAccountException)e;
		}
		if(e instanceof UnknownAccountException){
			return (UnknownAccountException)e;
		}
		return new AuthenticationException(e);
	}
	/**
	 * 检查用户
	 * @param user
	 * @param username
	 */
	private void checkUser(User user,String username){
		if(null == user){
			throw new UnknownAccountException(username + " can not find "+username+" from system");
		}
		if(user.isLocked()){
			throw new DisabledAccountException("the account is locked now");
		}
	}


到这里,shiro与普通的web项目集成已经完成。可以看到,shiro的非常易用的,无论是定制自己的realm,还是定义自己的filter,都可以体现shiro的易用性和灵活性。shiro对所有的功能都有一套默认的实现,比如说realm。用户可以完全不用自定义自己的reaml,shiro本身就提供了很多种realm的实现。在shiro-core-xx.jar的org.apache.shiro.realm包下,我们可以找到像JdbcRealm,JndiLdapRealm,IniRealm等等。shiro不仅易用和灵活,而且也可插拔。在很多地方,我们都可以用自己的实现在替换shiro的默认实现,当我们取消自己的实现时,shiro又会用默认的实现替上。在后面讲到shiro的集群和shiro共享时,我们就能深深感受到shiro的这种特性。

 

 

shiro和web项目整合代码下载 shiro与springMVC项目整合,并实现了常用的功能 立即下载

相关推荐

web项目集成shirodemo

web项目集成shiro demo,这是web项目集成shiro的一个综合案例

shiro

李老板的伐木工

weixin_45874214的博客 966

shiro1.5.3

最新shiro1.5.3全依赖jar包,里面包含shiro-core shiro-spring shiro-web 等等一系列

24、25-反序列化漏洞(JBoss、apache log4、apache Shiro、JWT)Weblogic未授权访问、代码执行、任意上传

serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的,之所以会产生反序列化漏洞是因为应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。 当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的 payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。 CVE-2021-2109Weblogic Server远程代码执行。apache log4j (Java日志记录库)

XLbb的博客 2711

shiro和web整合实例

shiro与web项目整合,包含整体权限表结构 项目需求与真实项目类似

【无标题】STM32F767串口空闲中断+DMA实现不定帧长度的接收

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、配置串口与DMA二、空闲中断服务函数二.串口+DMA发送三、主函数总结 前言 提示:这里可以添加本文要记录的大概内容: 使用STM32F767实现串口空闲中断+DMA传输接收不定帧长度数据,以及当中可能遇到的错误总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、配置串口与DMA //硬件模块配置可直接通过CUBEMX配置 void MX_USART1_UART_Init(void) { huart1.In.

qq_42589531的博客 1167

Shiro JNDI

概念   Shiro的JNDI主要是用来为JdbcRealm提供DataSource的。话说天下文章一大抄,shiro抄袭Spring的又一力证就是关于JNDI的设计。 Tomcat配置JDNI,Shiro获得数据源的Demo   ${catalina.base}/conf/context.xml中配置Resource <Resource name...

271

【顾邦小讲堂】第二十四期 电源环路测试从入门到精髓:一文掌握环路测试原理与电压注入点选择依据

电源环路测试是评估开关电源、线性电源等闭环系统稳定性的核心手段,直接关系到电源的稳定性、输出精度、动态响应、抗干扰能力甚至可靠性

GBupupup的博客 2117

Shiro整合Web项目及整合后的开发

将Shiro框架整合到新的web项目中很简单,就是在web项目中导入Shiro的相关jar包以及整合jar包即可完成整合(是不是很简单…哈哈就是这么简单)。难的就是整合了Shiro框架后的web项目该如何进行开发,关于这一点,我将在下方通过一个demo演示用户的登录与退出及登录后的权限管理带你入门加入了Shiro框架后的web项目开发。 写在前边的话:shiro基础知识的讲解请看前面的两篇文

黒辰的博客 1443

量化策略缺数据?一份QMT/PTrade免费数据清单与特殊数据源QtFactor评测

本文为量化策略开发者提供QMT和PTrade平台的免费数据资源清单,并深度评测QtFactor在补充特色数据方面的价值。涵盖Tick级数据、Level2行情、资金流向等关键信息,帮助开发者在预算有限的情况下构建高效数据解决方案,特别适合打板策略和日内回转交易。

weixin_29058331的博客 416

MiniMax H3本地部署实战:ComfyUI整合包安装与提速插件验证指南

在AIGC工具链快速演进的当下,本地部署内容生成模型成为许多创作者和开发者的关注焦点。本地部署意味着数据不出本机、可按需定制工作流,还能规避云端排队与外部依赖,其核心价值在于为内容生产提供可控、私密且可编程的生成环境。ComfyUI作为模块化节点式AI绘画工具,凭借灵活的工作流编排和API接口能力,成为承载这类模型的热门平台。MiniMax H3作为支持文本、参考图等多种输入的内容生成模型,与ComfyUI结合后,既适合个人进行概念验证,也能用于团队私有化流程搭建。实际落地过程中,中文整合包显著降低了环境配

weixin_29042035的博客 296

Shiro - Shiro简介;Shiro与Spring Security区别;Spring Boot集成Shiro

以下引自百度百科Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。三个核心组件:Subject,SecurityManager 和 Realms。...

MinggeQingchun的博客 4万+

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1567

我的shiro之旅: 二 让Shiro保护你的应用

博客已移至 http://blog.gogl.top   上一篇文章只是对Shiro作了一个简单的介绍,接下来的内容,将会介绍如何将shiro集成到应用中。这篇文章只要是介绍shiro跟spring项目的集成,以后也会写一些关于Shiro集成到普通web项目的一些文章。这些用到的是目前shiro的最新版本1.2.2,spring也是目前最前版本3.2.3.RELEASE,项目的依赖用的是mav...

Dylan的博文 7225

YOLOv11改进 | 注意力篇 | YOLOv11引入24年动态卷积块注意力(Dynamic-CBAM),并构建C2PSA_DynamicCBAM

1.Dynamic-CBAM介绍1.1 摘要:重度抑郁症是一种普遍而严重的心理健康状况,对您的情绪,思想,行动和对世界的整体感知产生负面影响。由于抑郁症的症状不明显,确定一个人是否抑郁是很复杂的。然而,他们的声音可能是我们可以识别抑郁症迹象的因素之一。抑郁的人会表现出不适、悲伤,他们可能说话缓慢、颤抖,声音中失去情感。在这项研究中,我们提出了动态卷积块注意力模块(DynamicCBAM),用于在注意力-GRU网络中通过分析人类的音频信号来分类情感。

tsg6698的博客 1002

基于STM32L4XX 、HAL库的DRV8825PWPR步进电机驱动器驱动程序应用设计

一、简介:DRV8825是德州仪器(TI)推出的一款高性能步进电机驱动器模块。它集成了微步进分度器、MOSFET H桥以及过流、欠压锁定和过热保护电路。主要特性:驱动能力: 最高电压45V,每相最大电流2.5A(需配合足够散热)。微步进: 支持全步、1/2、1/4、1/8、1/16、1/32微步模式,通过M0, M1, M2三个引脚控制。控制接口: 非常简单,只需要两个核心信号:(脉冲输入):每个上升沿脉冲驱动电机移动一个微步。(方向控制):高电平/低电平决定电机旋转方向。使能端: (睡眠模式,低电平有效)

PP_Cottage的博客 330

构建spring boot web项目:九、集成shiro

后门登录配置LoginBackDoorProperties.java(shiro)将management模块中的用户、部门服务类迁移至shiro模块。生成权限service(shiro)登录服务接口service(shiro)把测试接口放开 不做登录校验。

FamineFree的博客 861

OpenClaw 超级 AI 实战专栏【实战案例】(五)邮件收发 + 日历日程 + 文件管理一站式搞定

OpenClaw 实现办公自动化核心是模块解耦:邮件收发、文件管理、日历日程各自封装,便于维护和扩展;开发中需重点解决编码兼容、权限配置、时间格式、重复处理四大类坑点,核心思路是 “提前校验 + 异常兜底 + 统一格式”;敏感信息(邮箱密码、API Token)务必通过.env管理,避免硬编码泄露。

qq_36130719的博客 742

初入shiro框架-02与普通的JAVAWeb项目集成

1、添加依赖 <modelVersion>4.0.0</modelVersion> <groupId>com._520it</groupId> <artifactId>baseWebShiro</artifactId> <version>1.0.0</version> <packaging>war</packaging> <dependencies>

Eden4J的一路成长 255

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

spring和shiro的集成,以及web项目的登陆权限验证

一 Shrio与Spring集成 Shiro的理论 shiro是一个权限框架(身份认证,授权,会话,密码学) shiro(轻量级,粗粒度,其它涉及到细粒度自己代码完成)与Spring security(重量级,细粒度,有点麻烦) 身份认证(登录)authentication,授权authorization,密码学,会话管理 Subject(当前用户)—》SecurityMananger(所有功...

weixin_44860790的博客 451

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spring集成shiro详解

shiro说明 springboot集成shiro 前后端分离项目集成shiro shiro集成其他认证方式

u010752885的博客 7536

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Springboot集成shiro框架:

shiro整合springboot项目

Li_582258的博客 2500

SpringBoot之集成Shiro

1、Shiro简介 1.1、Shiro 是什么? Apache Shiro 是 Java 的一个安全(权限)框架。 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。 Shiro 可以完成:认证、授权、加密、会话管理、与Web 集成、缓存等。 下载地址 官网:http://shiro.apache.org/ github:https://github.com/apache/shiro 1.2、有哪些功能? Auth

The_Beacon的博客 412

Shiro - 快速搭建第一个 Shiro 基础工程

Apache Shiro 是一个轻量级 Java 安全框架,提供认证、授权、会话管理和加密功能。本文从零开始搭建基础 Shiro 工程,首先介绍了 Shiro 的核心概念(Subject、SecurityManager、Realm等),然后通过 Maven 配置环境依赖。文章演示了两种实现方式:1)基于 INI 配置文件的控制台应用,展示基本认证授权流程;2)Web 应用集成,通过过滤器实现 URL 级别安全控制。代码示例包括用户登录、权限检查等核心功能实现,帮助开发者快速掌握 Shiro 的基本用法。

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

Shiro 入门教程 - Shiro Spring 集成

作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!

smart_an的专栏 866

SpringBoot集成Shiro

Apache shiro 是Java的安全(权限)框架。Shiro可以可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JAVAEE环境。Shiro可以完成:认证授权、加密、会话管理,与web集成,缓存等。Authentications:身份证/ 登录,验证用户是不是拥有相应的身份Authorization:授权,即授权验证,验证某个用户是否拥有某个权限;即判断用户是否能进行什么操作,如:验证某个用户是否拥有某个角色。...

凌北辰的博客 1665
上一篇: 我的shiro之旅: 四 自定义filter
下一篇: 我的shiro之旅: 六 自定义shiro的sessionId
LHacker
博客等级 码龄17年 162粉丝 24原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值