shiro认证过程

本文介绍如何正确配置Apache Shiro的拦截链以实现登录表单的拦截。通过具体配置示例,展示了如何设置不同的URL路径权限,确保只有经过验证的用户才能访问受保护的资源。


<p>很多第一次使用shiro做demo的同学经常问我 为什么我提交的登录表单为什么没有拦截到,其实是因为他们没有对login拦截</p><p>将拦击链设置如下即可:</p>
<!-- Shiro Filter -->
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager" />
		<property name="loginUrl" value="/login" />
		<property name="successUrl" value="/" />
		<property name="filterChainDefinitions">
			<value>
				/login = authc
				/logout = logout
				/static/** = anon
				/api/** = anon
				/register/** = anon
				/admin/** = roles[admin]
				/** = user
			</value>
		</property>
	</bean>
	
/login = authc 当这个拦截器错用的时候就会进入shiro的框架系统。

authc对应的反射类为 org.apache.shiro.web.filter.authc.FormAuthenticationFilter

即表单拦截器, 它的父类中有一个executeLogin方法里面有subject.login(token)方法。这样程序 就进入了下图流程。




此图的过程如下,subject.login(token)后,shiro的主要管理者 Security Manager接管,它委托给Authenticater进行认证,Authenticater会将token传给realm,realm会将token信息与数据库中的信息进行对比,如果有对不上的 就是认证成功。


### Apache Shiro 认证流程图解析 #### 流程概述 Shiro认证过程涉及多个组件之间的交互,这些组件共同协作完成用户的验证工作。当用户尝试登录时,提交的身份信息会被传递给 `Subject` 对象,该对象代表当前正在执行操作的主体(即用户)。随后,`SecurityManager` 接收到来自 `Subject` 的请求并将其转发至相应的 `Authenticator` 实现类中[^4]。 #### 主要参与角色 - **Subject**: 表示正在进行安全操作的对象,通常对应于一个具体的应用程序用户。 - **SecurityManager**: 负责协调整个框架内的各种安全管理活动的核心控制器。 - **Authenticator**: 执行实际的身份验证逻辑,默认情况下由 `ModularRealmAuthenticator` 提供支持。 - **Realms**: 数据源接口,定义了如何从外部存储位置加载必要的凭证和其他属性来验证用户身份的信息。 #### 步骤说明 1. 用户通过界面输入用户名和密码等必要参数; 2. 应用层调用 `subject.login(token)` 方法发起一次新的认证请求; 3. 请求被转交给 `DefaultWebSecurityManager` 或其他类型的 `SecurityManager` 处理; 4. SecurityManager 将令牌传递给 Authenticator 组件继续处理; 5. 如果启用了多 Realm 支持,则 ModularRealmAuthenticator 会依次遍历所有已注册的 Realms 来寻找匹配项; 6. 每个 Realm 都有机会检查传入的身份证明材料是否有效; 7. 成功后返回包含用户详情的结果集;失败则抛出异常终止流程。 ```mermaid graph TD; A[用户提交表单] --> B(创建AuthenticationToken); B --> C{调用login方法}; C -- true --> D[触发认证]; D --> E((SecurityManager)); E --> F(Authenticator); F -.-> G1[第一个Realm?]; G1 -->|否| H2[下一个Realm...]; G1 -->|是| I1[(验证)]; H2 --> J2[(验证)]; I1 & J2 --> K[成功/失败]; K -- 成功 --> L[建立Session]; K -- 失败 --> M[抛出异常]; ``` 此 Mermaid 图展示了 Shiro 认证过程中各个阶段的关键节点以及它们之间的关系。请注意,在真实环境中可能会有更多的细节需要考虑,比如错误重试策略、并发控制等方面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值