首页 > 代码库 > shiro 实现自定义权限规则校验

shiro 实现自定义权限规则校验

<span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户访问没有权限的资源时会跳转到指定的登录url。</span>

但是如果系统中支持手机app,手机访问时没有使用session进行登录凭证管理,而是使用token,有两种解决方法:

1:支持手机客户端访问的资源在权限配置中配置成anon

2:实现自定义认证拦截器,对用户请求资源进行认证

显然第一种方法不适用,这些资源应该只能让我们自己的app进行访问。

第二中实现方式:

 

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager" />
		<!-- 登录的页面 -->
		<property name="loginUrl" value=http://www.mamicode.com/"/login/login.jsp" />>

/pets/android**=android 指定认证的拦截器,这里是自定义的拦截器
<pre name="code" class="java">/**
 * 移动设备认证基类,提供未登录用户操作认证权限
 *
 * 2014年7月8日
 */
public abstract class AbstractMobileAuthenticationFilter extends
		AuthenticationFilter {

	public static final String TOKEN = "token";
	protected Logger log = Logger.getLogger(getClass());

	@Override
	protected boolean onAccessDenied(ServletRequest request,
			ServletResponse response) throws Exception {

		log.info("安卓用户进入校验!" + getLoginUrl());

		HttpServletRequest req = (HttpServletRequest) request;

		String token = req.getParameter(TOKEN);
		if (isAccess(token)) {
			return onAccessSuccess(req, (HttpServletResponse) response);
		}

		return onAccessFail(req, (HttpServletResponse) response);
	}

	/**
	 * 判断token的合法性
	 * 
	 * @param token
	 * @return
	 */
	public abstract boolean isAccess(String token);

	/**
	 * 认证成功进行的操作处理
	 * 
	 * @param request
	 * @param response
	 * @return true 继续后续处理,false 不需要后续处理
	 */
	public abstract boolean onAccessSuccess(HttpServletRequest request,
			HttpServletResponse response);

	/**
	 * 认证失败时处理结果
	 * 
	 * @param request
	 * @param response
	 * @return true 继续后续处理,false 不需要后续处理
	 */
	public abstract boolean onAccessFail(HttpServletRequest request,
			HttpServletResponse response);

}

只需要重写onAccessDenied方法,进行token判断!