(3)Shiro的配置项(SSM和SpringBoot配置)

SSM篇

Shiro的配置一般来说都是通过xml文件来实现的,当然也有SpringBoot通过配置类实现的,本节是传统的java项目通过配置文件实现。
各位把眼睛睁亮,开始了::
POM文件不多说 自己添加。
一.web.xml中的配置。

大家都知道web.xml是web程序的入口 。shiro在web.xml中的配置其实就是一个拦截器,将所有的路径都拦截,进入shiro的管理中进行处理。决定哪些放行,哪些拦截。详看代码:

<!--配置shiro过滤器  -->
    <filter>
        <!--shiro的名称一致  -->
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <!-- spring创建出来的filter 的生命周期交给servlet管理  -->
            <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>
二.application-shiro.xml中的配置。
<!-- 1.shiro的组件以bean的形式 交给spring容器管理  -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean>


     <!--2.为指定的目标创建代理对象    指定的目标就是shiro的bean  -->
     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
        <!--默认使用cglib的代理对象 
            代理模式:1 jdk   2cglib
         -->
        <property name="proxyTargetClass" value="true"></property>
     </bean>


     <!--3.强制使用cglib代理模式 
        当生成切面的时候 代理对象都统统使用cglig代理
      -->
     <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>





     <!--4.配置realm Shiro是一个安全框架 可以为用户的校验和权限的校验 都是需要用户提供校验的规则和原料
        这个类就是Realm  
        这个Realm是自己定义的 
       -->
      <bean id="authRealm" class="cn.tarena.ht.shiro.AuthRealm">

        <!--自定义的加密算法  
            name属性的名称是固定的不要修改
        -->
        <property name="CredentialsMatcher" ref="authEnctype"></property>
      </bean>

      <!--5.配置自定义加密器  -->
      <bean id="authEnctype" class="cn.tarena.ht.shiro.AuthCredential"></bean>

     <!--6.配置shiro的安全管理器  -->
     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!--引入用户自动以的realm  realm的名称 不能对随便修改 -->
        <property name="realm" ref="authRealm"></property>
     </bean>

     <!--7.配置权限管理器-->
     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <!--引入安全管理器   -->
        <property name="securityManager" ref="securityManager"></property>
     </bean>

     <!--8.配置过滤器  -->
     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!--注入安全管理器  -->
        <property name="securityManager" ref="securityManager"></property>

        <!--默认的登陆界面-->
        <property name="loginUrl" value="/index.jsp"></property>

        <!--过滤器链  -->
        <property name="FilterChainDefinitions">
            <value>
                <!--anon 表示放行     authc拦截  -->
                /tologin*=anon
                /login*=anon
                /staticfile/**=anon

                <!--所有的访问都拦截 -->
                /** = authc         
            </value>
        </property>

     </bean>

配置完了就是 自己写自定义的Realm和自定义的CredentialsMatcher
自定义的Realm要继承AuthorizingRealm
自定义的CredentialsMatcher要继承SimpleCredentailsMathce
上面继承的这两个不是说非要这两个,而是这两个类更加容易实现我们的业务,同样 90%也适用你。

SpringBoot篇

shiro用SpringBoot进行配置 ,其实就是将配置文件转换成了配置类而已,大家熟悉了xml的配置,配置类的方式也相当简单。
详细代码:

    /**
     * 1.将shiro生命周期交给Spring管理
     */

    @Bean(name="lifecycleBeanPostProcessor")
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
        return  new LifecycleBeanPostProcessor();
    }

    /**
     * 2.为制定目标创建代理对象
     */
    @Bean
    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){
        DefaultAdvisorAutoProxyCreator creator=new DefaultAdvisorAutoProxyCreator();
        creator.setBeanName("lifecycleBeanPostProcessor");
        creator.setProxyTargetClass(true);
        return creator;
    }
    /**
     * 3.定义自定义凭证匹配器
     */
    @Bean("credentialsMatcher")
    public CredentialsMatcher credentialsMatcher(){
        return new AuthCredentialsMatcher();
    }

    /**
     * 4.指定自定义的Relam
     */
    @Bean("authRealm")
    public AuthRealm authRealm(@Qualifier("credentialsMatcher")CredentialsMatcher credentialsMatcher){
        AuthRealm authRealm = new AuthRealm();
        authRealm.setCredentialsMatcher(credentialsMatcher);
        return authRealm;
    }
    /**
     * 5.配置核心安全管理器
     */
    @Bean("securityManager")
    public DefaultWebSecurityManager securityManager(@Qualifier("authRealm") AuthRealm authRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(authRealm);
        return securityManager;
    }

    /**
     * 6.配置权限管理器
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor aASA = new AuthorizationAttributeSourceAdvisor();
        aASA.setSecurityManager(securityManager);
        return aASA;
    }


    /**
     * 7.配置过滤器链
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        bean.setSecurityManager(securityManager);
        bean.setLoginUrl("/");
        //设置拦截器链
        LinkedHashMap<String,String> map = new LinkedHashMap<String,String>();
        map.put("/","anon");
        map.put("/login","anon");
        map.put("/css/**","anon");
        map.put("/components/**","anon");
        map.put("/images/**","anon");
        map.put("/js/**","anon");
        map.put("/skin/**","anon");
        map.put("/**","authc");
        bean.setFilterChainDefinitionMap(map);
        return bean;
    }

    /**
     * 8.thymeleaf设置shiro标签
     *注意要用到这个必须加入依赖 且高版本报错2.0以上都报错
      <dependency>
      <groupId>com.github.theborakompanioni</groupId>
      <artifactId>thymeleaf-extras-shiro</artifactId>
      <version>1.0.2</version>
      </dependency>
     *
     * @return
     */
    @Bean
    public ShiroDialect shiroDialect() {
        return new ShiroDialect();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值