shiro认证的流程

本文介绍了Shiro认证的流程,包括在web.xml中配置DelegatingFilterProxy以通过Spring容器获取真实的filter,以及在applicationContext-shiro.xml中定义的filter执行顺序。重点讲述了login.action的实现,它提供登录页面,接受POST提交,并处理认证失败的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1shiro认证流程(掌握!!!)

   1、subject.login(token);
    token:令牌,包括账号和密码
    token是根据当前用户请求的账号和密码去构造!
    2、securityManager.login(token)
    3、Authenticator.login(token) (重点理解部分)
     Authenticator获取到用户输入的账号和密码。
     Authenticator去调用realm从数据源中获取正确的账号和密码。
     realm:在没有自定义realm时候,shiro使用自定义的CustomRealm。
     CustomRealm通过token获取请求的账号,根据账号去查询数据。


    如果CustomRealm根据用户请求的账号从数据库没有找到记录,CustomRealm给认证器返回NULL,认证器抛出异常UnknownAccountException (账号不存在)
    如果CustomRealm根据用户请求的账号从数据库找到记录了,将账号对应的密码 给认证器返回,认证器拿realm返回的正确的密码 和token中输入的密码进行比对,如果一致则认证通过,否则抛出异常 IncorrectCredentialsException(密码 错误)

shiro框架的方式和spring整合来实现用户的认证
    
    1.   web.xml中配置一个代理的对象。他会通过spring容器找到filter的工厂来找到真正的filter.    
      <!-- shiro过虑器,DelegatingFilterProxy通过代理模式通过spring容器中的filter工厂创建真正的 fitler -->

           <filter >

                 <filter-name> shiroFilter</filter-name >

                 <filter-class> org.springframework.web.filter.DelegatingFilterProxy</filter-class >

                 <!-- 设置true由 servlet容器控制filter的生命周期 -->

                 <init-param>

                      <param-name> targetFilterLifecycle</param-name >

                     <param-value> true</ param-value>

                 </init-param>

                 <!-- 设置spring容器filter工厂的bean id,如果不设置则找与filter-name一致的bean-->

                 <init-param>

                     <param-name> targetBeanName</param-name >

                     <param-value> shiroFilter</param-value >

                 </init-param>

           </filter >

           <filter-mapping >

                 <filter-name> shiroFilter</filter-name >

                 <url-pattern> /*</ url-pattern>

           </filter-mapping >
       
    2. applicationContext-shiro.xml中,有很多的filter。都是按顺序执行的 : anno(公开的放行    logout-->退出  auth-->必须通过认证)

  
<!-- fitler工厂,可以创建不同的 过虑器 -->
     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean" >
           <property name= "securityManager" ref="securityManager" />
           <!-- loginUrl会被formAuthenticationFilter判断是不是认证提交 -->
           <property name= "loginUrl" value ="/login.action" />
           <!-- 认证成功统一跳转到first.action,建议不配置, shiro认证成功自动到上一个请求路径 -->
           <property name= "successUrl" value="/first.action" />
           <property name= "unauthorizedUrl" value="/refuse.jsp" />
           <!-- 自定义认证filter配置 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值