基于Spring框架的Shiro配置

jopen 10年前發布 | 38K 次閱讀 Shiro 安全相關

一、在web.xml中添加shiro過濾器 

<!-- Shiro filter-->
    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.DelegatingFilterProxy
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

二、在Spring的applicationContext.xml中添加shiro配置 
1、添加shiroFilter定義

<!-- Shiro Filter -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager" />
    <property name="loginUrl" value="/login" />
    <property name="successUrl" value="/user/list" />
    <property name="unauthorizedUrl" value="/login" />
    <property name="filterChainDefinitions">
        <value>
            /login = anon
            /user/** = authc
            /role/edit/* = perms[role:edit]
            /role/save = perms[role:edit]
            /role/list = perms[role:view]
            /** = authc
        </value>
    </property>
</bean>

2、添加securityManager定義 

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm" />
    </bean>

3、添加realm定義 

<bean id=" myRealm" class="com...MyRealm" />

三、實現MyRealm:繼承AuthorizingRealm,并重寫認證授權方法 

public class MyRealm extends AuthorizingRealm{

    private AccountManager accountManager;
    public void setAccountManager(AccountManager accountManager) {
        this.accountManager = accountManager;
    }

    /**
     * 授權信息
     */
    protected AuthorizationInfo doGetAuthorizationInfo(
                PrincipalCollection principals) {
        String username=(String)principals.fromRealm(getName()).iterator().next();
        if( username != null ){
            User user = accountManager.get( username );
            if( user != null && user.getRoles() != null ){
                SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
                for( SecurityRole each: user.getRoles() ){
                        info.addRole(each.getName());
                        info.addStringPermissions(each.getPermissionsAsString());
                }
                return info;
            }
        }
        return null;
    }

    /**
     * 認證信息
     */
    protected AuthenticationInfo doGetAuthenticationInfo(
                AuthenticationToken authcToken ) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
        String userName = token.getUsername();
        if( userName != null && !"".equals(userName) ){
            User user = accountManager.login(token.getUsername(),
                            String.valueOf(token.getPassword()));

            if( user != null )
                return new SimpleAuthenticationInfo(
                            user.getLoginName(),user.getPassword(), getName());
        }
        return null;
    }

}

原文地址:http://kdboy.iteye.com/blog/1103794

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!