Spring 集成Shiro 框架

列表内容

1、导包
Spring集成shiro的依赖包

org.apache.shiro
shiro-core
1.2.3


org.apache.shiro
shiro-spring
1.2.3


org.apache.shiro
shiro-cas
1.2.3


commons-logging
commons-logging




org.apache.shiro
shiro-web
1.2.3


org.apache.shiro
shiro-ehcache
1.2.3


org.apache.shiro
shiro-quartz
1.2.3

需要的Spring包自己去百度,使用Spring 4.3以上的包.不然集成可能会出问题。具体问题后面讨论。
2、配置文件
一、在web.xml里面添加shiro的全局代理过滤器

shiroFilter
org.springframework.web.filter.DelegatingFilterProxy

targetFilterLifecycle
true



shiroFilter
/*

注意:这是一个shiro代理过滤器,不是真实的过滤器,真实的过滤器在后面spring-shiro 配置文件里面会配置。
二、配置spring-shiro.xml

<!-- 安全管理器 :shiro的核心,功能类似于springmvc的DispatchServlet -->
<bean id="securityManager"    class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

    <property name="authenticator" ref="authenticator" />
    <property name="cacheManager" ref="cacheManager" />
    <property name="authorizer" ref="authorizer" />
</bean>
<!-- 自定义realm:认证和授权 数据源-->
<bean id="userRealm" class="com.realm.UserRealm">

    <!-- 配置加密器 :这里用来对密码加密-->
    <!-- <property name="credentialsMatcher"> -->
    <!-- <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher"> -->
    <!-- <property name="hashAlgorithmName" value="MD5"></property> -->
    <!-- <property name="hashIterations" value="3"></property> -->
    <!-- <property name="storedCredentialsHexEncoded" value="true"/> -->
    <!-- </bean> -->
    <!-- </property> -->
</bean>

<!-- 认证管理器:判断用户是否是合法用户 -->

<bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
    <property name="realms">
        <list>
            <ref bean="userRealm"></ref>
        </list>
    </property>
</bean>

<!-- 授权管理器 :给用户访问资源的权限-->

<bean id="authorizer" class="org.apache.shiro.authz.ModularRealmAuthorizer">
    <property name="realms">
        <list>
            <ref bean="userRealm"></ref>
        </list>
    </property>
</bean>

<!-- 缓存管理器 使用Ehcache实现  -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    <property name="cacheManagerConfigFile" value="classpath:ehcache.xml" />
</bean>










    <!-- 读取初始自定义权限内容 -->
    <property name="filterChainDefinitions">
        <value>
            /logon.jsp=anon 
            /logon=anon
            /logout=logout
            /**=authc
        </value>
    </property>
</bean>

三、ehcache.xml
这个自己去百度
3、自定义realm
这里简单的介绍一下 realm:
realm:域,认证器 和授权器里面的数据都是重这里面来的。

public class UserRealm extends AuthorizingRealm{
@Autowired
UserDao userDao;
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
throws AuthenticationException {

    UsernamePasswordToken usernameToken = (UsernamePasswordToken) token;
    String username = usernameToken.getUsername();
    User user = userDao.findByName(username);

    if(user!=null){
        AuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());
        return info;
    }

    throw new AuthenticationException();

}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

    Set<String> roles= new HashSet<String>();
    User user=(User) principals.getPrimaryPrincipal();
    if("qqq".equals(user.getUsername())){
        roles.add("user");
    }else{
        roles.add("admin");
    }
    //AuthorizationInfo封装获取的所有角色
    AuthorizationInfo info = new SimpleAuthorizationInfo(roles);
    return info;
}

}
最后简单的说一说我做ssm集成时遇到的问题:
权限注解在controller方法里面引用不了。
1、查看spring 的相关jar包是不是 4.3以上的。
2、启动注解的bean配置在springmvc的配置文件里面。

<!-- Shiro生命周期处理器 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
<!-- 启用shiro注解 -->
<aop:config proxy-target-class="true"></aop:config>
<bean
    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
    <property name="securityManager" ref="securityManager" />
</bean>


新手,如果有什么写错的地方请大家指出,但是这个是通过我自己测试过,可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值