athrunwang

          紀元
          數據加載中……
          apache shiro與spring的環境搭建
          [代碼] web.xml
          <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>
                       <!--spring 的配置文件-->
                       classpath:/applicationContext-hibernate.xml
                  </param-value>
             </context-param>
           
             <!-- shiro -->
             <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>
           
             <!-- Listeners -->
             <listener>
                  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
             </listener>
          [代碼] applicationContext-hibernate.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="     xmlns:xsi="     xsi:schemaLocation="
                
          http://www.springframework.org/schema/beans
                 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                 http://www.springframework.org/schema/tx
                 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                 http://www.springframework.org/schema/aop
                

               <!-- SessionFactory, DataSource, etc. omitted -->

               <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                    destroy-method="close">
                    <property name="driverClassName" value="${jdbc.driverClassName}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
               </bean>

               <bean id="sessionFactory"
                    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                    <property name="dataSource" ref="dataSource" />
                    <property name="packagesToScan">
                         <list>
                              <value>org.projects.graduates.domain</value>
                         </list>
                    </property>
                    <property name="hibernateProperties">
                         <value>hibernate.dialect=${hibernate.dialect}</value>
                    </property>
               </bean>

               <bean id="txManager"
                    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                    <property name="sessionFactory" ref="sessionFactory" />
               </bean>

               <tx:advice id="txAdvice" transaction-manager="txManager">
                    <tx:attributes>
                         <tx:method name="get*" read-only="true" />
                         <tx:method name="find*" read-only="true" />
                         <tx:method name="*" propagation="REQUIRED" />
                    </tx:attributes>
               </tx:advice>

               <aop:config>
                    <aop:pointcut id="appOperation"
                         expression="execution(* org.projects.graduates.app.GradApplication.*(..))" />
                    <aop:advisor advice-ref="txAdvice" pointcut-ref="appOperation" />
               </aop:config>

               <!-- shiro -->
               <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
                    <property name="securityManager" ref="securityManager" />
                    <property name="loginUrl" value="/login.action" />
                    <property name="successUrl" value="/main.action" />
                    <property name="unauthorizedUrl" value="/login.action" />
                    <property name="filterChainDefinitions">
                         <value>
                              /index.action = anon
                              /login.action = anon
                              /main.action = authc, roles[admin]
                              /course/** = authc, roles[admin]
                         </value>
                    </property>
               </bean>

             
               <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
               <!--設置自定義realm-->
                    <property name="realm" ref="myRealm" />
               </bean>
             
               <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
             
               <!--myRealm 繼承自AuthorizingRealm-->
               <bean id="myRealm" class="org.projects.graduates.shiro.GradRealm" ></bean>

               <bean
                    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
                    <property name="staticMethod"
                         value="org.apache.shiro.SecurityUtils.setSecurityManager" />
                    <property name="arguments" ref="securityManager" />
               </bean>

          </beans>

          [代碼] org.projects.graduates.shiro.GradRealm

          public class GradRealm extends AuthorizingRealm {

               private SecurityApplication securityApplication = new SecurityApplicationImpl();

               public GradRealm() {
                    super();
                    //設置認證token的實現類
                    setAuthenticationTokenClass(UsernamePasswordToken.class);
                    //設置加密算法
                    setCredentialsMatcher(new HashedCredentialsMatcher(Sha1Hash.ALGORITHM_NAME));
                  
               }
               //授權
               protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
                    String loginName = (String) principalCollection.fromRealm(getName()).iterator().next();
                    User user = securityApplication.findby(loginName);
                    if (null == user) {
                         return null;
                    } else {
                         SimpleAuthorizationInfo result = new SimpleAuthorizationInfo();
                       
                         result.addRoles(UserRoles.findRoleNamesOf(user));
                         for (Role role : UserRoles.findRolesOf(user)) {
                              result.addStringPermissions(role.getPermissions());
                         }
                       
                         return result;

                    }
               }

               //認證
               protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
                    UsernamePasswordToken upToken = (UsernamePasswordToken) token;
                    User user = securityApplication.findby(upToken.getUsername());
                    if (user != null) {
                         return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
                    }
                    return null;
               }
          }


          posted on 2012-03-06 10:07 AthrunWang 閱讀(4984) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 讷河市| 朝阳市| 庐江县| 黔西县| 甘肃省| 淅川县| 郯城县| 潞西市| 台安县| 东安县| 杂多县| 白山市| 通州区| 明溪县| 梁山县| 莆田市| 巩义市| 垫江县| 江油市| 汤阴县| 黑河市| 泉州市| 平遥县| 内江市| 滨州市| 房产| 卢氏县| 专栏| 蓝田县| 锦州市| 惠东县| 西畴县| 通州市| 利川市| 聂拉木县| 上饶县| 东平县| 红安县| 龙州县| 桂林市| 湖南省|