首先简单介绍一下shiro

shiro是Apache开源项目的一个安全开源框架。提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。


这篇文章介绍一下在对roles进行判断,一般验证一个角色,想添加多个角色时,会报一些重定向循环之类的错误。


首先要重写一个RolesAuthorizationFilter我们命名为AnyRolesAuthorizationFilter


代码如下:

AnyRolesAuthorizationFilter.java

public class AnyRolesAuthorizationFilter extends RolesAuthorizationFilter {
	@Override
	public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
			throws IOException {

		final Subject subject = getSubject(request, response);
		final String[] rolesArray = (String[]) mappedValue;

		if (rolesArray == null || rolesArray.length == 0) {
			// no roles specified, so nothing to check - allow access.
			return true;
		}

		for (String roleName : rolesArray) {
			if (subject.hasRole(roleName)) {
				return true;
			}
		}

		return false;
	}
}

然后加入到你的xml文件中:


<property name="filters">
		    <map>
	            <entry key="authc" value-ref="formAuthenticationFilter"/>
	            <entry key="roles" value-ref="anyRolesAuthorizationFilter"/>
	        </map>
		</property>

	<bean id="formAuthenticationFilter" class="com.thon.security.CaptchaFormAuthenticationFilter"/> 
	<bean id="anyRolesAuthorizationFilter" class="com.thon.security.AnyRolesAuthorizationFilter"/> 

下面就是关键的多角色的配置:


在你的xml文件中配置如下:


<property name="filterChainDefinitions">
			<value>
				/index = roles[user,institution,charitarian,admin]
				/** = anon
			</value>
		</property>


ok。大功告成。


这里只是记录一下平时学习笔记。


详细的教程,如果有需要后面会补上。


转载请标明出处:http://blog.csdn.net/zemochen/article/details/16891965


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐