列表内容
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>
新手,如果有什么写错的地方请大家指出,但是这个是通过我自己测试过,可用。