zoukankan      html  css  js  c++  java
  • Shiro在Web环境下集成Spring的大致工作流程

    1,Shiro提供了对Web环境的支持,其通过一个 ShiroFilter 入口来拦截需要安全控制的URL,然后进行相应的控制。
         ①配置的 ShiroFilter 实现类为:org.springframework.web.filter.DelegatingFilterProxy 。
         ②这是一个 Servlet Filter 的代理对象,它在IOC容器中去找实现了Filter接口的bean。
         ③它可以通过一个初始化参数"targetBeanName"来找到bean,也可以通过<filter-name>找到bean。
     
    2,ShiroFilter 类似于SpringMvc中的前端控制器,是安全控制的入口点,其负责读取配置文件(如ini配置文件),然后判断该URL是否需要登陆/授权等工作。
         ①在SpringIOC容器中配置org.apache.shiro.spring.web.ShiroFilterFactoryBean的时候,该bean的名称必须要和 ShiroFilter 的<filter-name>一致。否则在服务加载的时候会报错。因为Shiro会在IOC容器中查找和<filter-name>对应的filter bean。
         
         下面是一个比较基本的Shiro配置内容:
         

      

         
     
    3,受保护的URL如何进行配置
         ①[urls]部分的配置,其格式为:url=拦截器[参数],拦截器[参数]。
         ②如果当前请求的url匹配[urls]部分的某个url模式,将会执行器配置的拦截器。
         ③anon(anonymous)拦截器表示可以匿名访问。
         ④authc(authencation)拦截器标识需要身份认证通过后才能访问。
         ⑤logout(logout)拦截器表示登出/退出登录,它会清空shiro缓存信息
         ⑥url模式使用 Ant 风格模式
              [1]?匹配一个字符;
              [2]*匹配零个或多个字符;
              [3]**匹配路径中的零个或多个路径;
     
     
    4,认证/授权基本步骤
         ①获取当前的 Subject,调用SecurityUtils.getSubject();
         ②判断当前用户是否已经认证,调用 Subject 的 isAuthenticated();
         ③或没有被认证,则把用户名和密码封装为 UserNamePassworkToken 对象
              [1]客户端提交的表单数据。
              [2]提交数据到SpringMVC的 handler 上。
              [3]获取用户名和密码。
         ④执行登录,调用 Subject 的 login(AuthencationToken);
         ⑤自定义Realm 方法,从数据库中获用户安全数据,返回给Shiro
              [1]实际上需要继承 org.apache.shiro.realm.AuthencatingRealm 类(仅仅实现认证,org.apache.shiro.realm.AuthorizingRealm 可以用来认证和授权)。
              [2]实现 doGetAuthenticationInfo(AuthenticationToken) 方法。
         ⑥最后由Shiro完成密码的比对。
  • 相关阅读:
    JSJ—类与对象
    JSJ—案例谈面向对象
    实现简单神经网络
    SSM+Netty项目结合思路
    SSM-Netty实现软硬件通信,真实项目案例
    Netty实战十四之案例研究(一)
    Netty实战十三之使用UDP广播事件
    Netty实战十一之预置的ChannelHandler和编解码器
    Netty实战十二之WebSocket
    Netty实战十之编解码器框架
  • 原文地址:https://www.cnblogs.com/startcaft/p/6955567.html
Copyright © 2011-2022 走看看