shiro(三)shiro实战——Spring 集成 Shiro(案例)-1

简介: shiro(三)shiro实战——Spring 集成 Shiro(案例)

**步骤

加入 jar 包

配置 web.xml 文件

在 Spring 的配置文件中配置 Shiro**


配置 web.xml 文件

配置启动 Spring IOC 容器的 Filter
配置 WEB 应用中的 Shiro Filter

屏幕快照 2022-05-10 上午11.52.41.png



在 Spring 的配置文件中配置 Shiro


配置自定义 Realm:实现自定义认证和授权

配置 Shiro 实体类使用的缓存策略

配置 SecurityManager

配置保证 Shiro 内部 Bean 声明周期都得到执行的 Lifecycle Bean 后置处理器

配置AOP 式方法级权限检查

配置 Shiro Filter


配置 Shiro Filter


filterChainDefinitions 属性:设置 Shiro Filter 拦截的 URL 及访问该 URL 所需要的权限信息。

格式:URL_Ant_Path_Expression = Path_Specific_Filter_Chain。


等号左边是一个与 Web  应用程序上下文根目录相关的Ant 风格的路径表达式。

等号右边是逗号隔开的过滤器列表,用来执行匹配该路径的请求


Ant 风格资源地址支持 3 种匹配符:


?:匹配文件名中的一个字符

*:匹配文件名中的任意字符

**:** 匹配多层路径


路径表达式


URL 权限采取第一次匹配优先的方式

比如:


/account/** = ssl, authc

/account/signup = anon


如果传入的请求访问是 /account/signup/index.html,则会匹配 ssl, authc 权限,而 annon 将永不会被匹配!因为/account/** 匹配 短路 了其余的权限定义


权限信息


1、权限是用逗号隔开的过滤器列表,用来执行对该路径请求的匹配。

2、必须符合以下格式:filter1[optional_config1], filter2[optional_config2],…


filterN:一个 shiro 中的过滤器的别名

[optional_configN] :可选的权限字符串。若该过滤器对该 URL  路径不需要特定的配置,可以忽略括号,于是 filteN[] 就变成了filterN.


shiro中默认的过滤器

屏幕快照 2022-05-10 上午11.53.38.png



authc 和 user

1、user 和 authc :当应用开启了rememberMe 时,用户下次访问时是一个 user,但不是 authc,因为authc是需要重新认证的

2、user 表示用户不一定已通过认证,只要被 Shiro 记住过登录状态的用户就可以正常发起请求,比如rememberMe

3、简言之:以前的一个用户登录时开启了rememberMe,然后他关闭浏览器,下次再访问时他就是一个user,而不是authc


Remembered 和 Authenticated


Remembered(记住我):


一个 记住我 的 Subject 不是匿名的,是有一个已知的身份ID(也就是subject.getPrincipals()是非空的)。即:这个被记住的身份 ID 是在之前的session 中被认证的。

如果 subject.isRemembered()  返回 true,则 Subject  被认为是被记住的。


Authenticated(已认证):


一个已认证的 Subject 是指在当前 Session  中被成功地验证过:login方法被调用并且没有抛出异常

如果 subject.isAuthenticated()返回 true 则认为 Subject 已通过验证。


注意:Remembered 和Authenticated 是互斥的——若其中一个为真则另一个为假,反之亦然


filterChainDefinitions 案例


/admin=authc,roles[admin]:表示用户必需已通过认证,并拥有 admin 角色

/edit=authc,perms[admin:edit]:表示用户必需已通过认证,并拥有 admin:edit 权限

/home=user:表示用户不一定需要已经通过认证,只需要曾经被Shiro记住过登录状态


基于注解的授权


Shiro提供的注解

@RequiresAuthentication :要求当前 Subject 已经在当前的session 中被验证通过才能被注解的类/实例/方法访问或调用。

@RequiresGuest :要求当前的 Subject 是一个 “guest”,也就是他们必须是在之前的 session 中没有被验证或记住才能被注解的类/实例/方法访问或调用。

@RequiresPermissions:要求当前的 Subject 被允许一个或多个权限,以便执行注解的方法,比如:@RequiresPermissions(“account:create”)

@RequiresRoles:要求当前的 Subject 拥有所有指定的角色。如果他们没有,则该方法将不会被执行,而且 AuthorizationException 异常将会被抛出。比如:@RequiresRoles(“administrator”)

@RequiresUser:需要当前的Subject 是一个应用程序用户才能被注解的类/实例/方法访问或调用。要么是通过验证被确认,或者在之前session 中的 ‘RememberMe‘ 服务被记住。

屏幕快照 2022-05-10 上午11.54.02.png




目录
相关文章
|
7月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
7月前
|
人工智能 自然语言处理 API
快速集成GPT-4o:下一代多模态AI实战指南
快速集成GPT-4o:下一代多模态AI实战指南
576 101
|
6月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1187 2
Spring Boot 3.x 微服务架构实战指南
|
6月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
7月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1222 12
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
530 0
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
1492 6
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
1202 4

热门文章

最新文章