zoukankan      html  css  js  c++  java
  • javase和javaweb环境下shiro的搭建

    shiro-1

    javase环境下搭建shiro
             1.导入jar包
              2.配置文件:存储临时文件
                     shiro.ini文件:存储数据,用户名,密码,角色,权限
              3.代码
                   // 1.获取安全管理器
    		Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
    		SecurityManager securityManager = factory.getInstance();
    		// 2.设置安全管理器
    		SecurityUtils.setSecurityManager(securityManager);
    		// 3.获取subject对象,即要登录的对象
    		Subject subject = SecurityUtils.getSubject();
    spring与shiro集成
                 1.导入jar包
                  2.搭建好spring,springmvc
                  3.搭建shiro环境
                        1.web.xml
                                         <filter>
    		                           <filter-name>shiroFilter</filter-name>
    		                          <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    		                           <init-param>
    			                      <param-name>targetFilterLifecycle</param-name>
    			                      <param-value>true</param-value>
    		                        </init-param>
    	                               </filter>
    	                               <filter-mapping>
    		                              <filter-name>shiroFilter</filter-name>
    		                              <url-pattern>/*</url-pattern>
    	                               </filter-mapping>
                              
                     2.在spring.xml中进行相关配置
    
    shiro配置的核心:spring.xml欧中配置的一个bean<bean class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"></bean>
    
    web.xml中DelegatingFilterProxy作用:入口,完成servlet容器到ioc容器的关联,到spring容器中找filter-name相同名字的bean实例
    如果没有配置targetBeanName属性,则filter-name必须与bean的name相同
    
    表单提交的数据封装到 usernamePasswordToken 数据库查询到的数据封装到SimpleAuthenticationInfo
    
    加密:MD5, SHA1
    1.存储数据时需要将用户输入的明文继续加密(Hibernate当中涉及md5加密)  (Ream.java)
                            //将存入数据库的密码进行MD5加密
    			SimpleHash sh = new SimpleHash("md5", credentials, null, 2019);
    2.前端用户输入的值,进行加密,string字符串经过md5加密(spring.xml)
                          <!-- 将前端的输入的密码进行md5的加密 -->
    		      <property name="credentialsMatcher">
    			  <bean
    				class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
    				<property name="hashAlgorithmName" value="md5"></property>
    				<property name="hashIterations" value="2019"></property>
    			  </bean>
    		     </property>
    盐值加密:原有加密的基础上加密(两个相同密码在数据库存储的值还是不一样)
            1.前端token当中获取的密码应该进行盐值加密
                  ByteSource salt = ByteSource.Util.bytes(principal);
                  new SimpleAuthenticationInfo(principal, sh, salt, realmName);
            2.数据库中的值进行盐值加密
                   new SimpleHash("md5", credentials, salt, 2019);
    多Realm获取数据:将一个密码存放在多个数据库中,建立多个Realm,并且每个realm使用不同的加密方式,在subject.login中会进行多个realm的调用,执行多次验证,提高数据安全性
             1.第一种方法:
                <!-- 多个realm -->
    		<property name="realms">
    			<list>
    				<ref bean="jdbcRealm" />
    				<ref bean="jdbcRealm1" />
    			</list>
    		</property>
               2.第二种方法:通过ModularRealmAuthenticator认证器
    
    shiro认证策略:多个realm访问多个数据库,如何判断是否登录成功
      1.FirstSucessfulStrategy    第一个realm认证成功就算成功
      2.AtLeastOneSuccessfulStrategy 多个realm认证时,一个成功代表成功(默认)
      3.AllSuccessfulStrategy 多个realm认证时,全部成功才代表成功
    
    授权:控制哪一个用户可以访问哪一个web资源
         1.编程式
             if(subect.hasRole){
                      //有权限
            }else{
                     //没有权限
             }
         2.注解式:通过在执行的java方法上注解
              @RequireRoles("admin")
              public void hello(){
                 //有权限
              }
         3.jsp/gsp标签
        <shiro:hasRole name="admin">有权限</shiro:hasRole>
    1.在FilterChainDefinitions中定义web资源对应角色
          web资源=roles[角色名称]
           /admin.jsp=roles[admin]
    2.一个用户进行登录认证成功之后,之中还是要查找认证成功的角色拥有什么角色.realm可以和数据库交互,获取指定认证成功的用户对应的角色
            1.我们可以自定义一个Realm,继承AuthorizingRealm,认证和授权
            2.在ioc容器配置指定的Realm的bean实例(授权器)
            3.告知securityManager使用哪一个授权管理器
    

    参考视频:点击我

  • 相关阅读:
    人工智能理解
    24个提高你的知识和技能极限的数据科学(机器学习)项目(免费)
    5个优秀的计算机视觉应用与相关数据集
    5行代码使Scikit-Learn参数学习速度提高5倍
    如何在PyTorch和TensorFlow中训练图像分类模型
    六个月的机器学习 / 计算机视觉工程师
    NLP:不要重新造轮子
    用遗传算法优化垃圾收集策略
    使用Detectron2分6步进行目标检测
    五篇值得阅读的ECCV 2020 图像识别相关论文
  • 原文地址:https://www.cnblogs.com/wantao/p/10596277.html
Copyright © 2011-2022 走看看