码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-07-12 17:22:28      阅读:339      评论:0      收藏:0      [点我收藏+]

标签: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="/login/login.jsp" />
		<property name="successUrl" value="/success.jsp" />
		<property name="unauthorizedUrl" value="/error.jsp" />
		<property name="filterChainDefinitions">
			<value>
				/android.html**=anon
				/pets/android**=android
				/pets/login/**=anon
				/**=authc
			</value>
		</property>
		<property name="filters">
			<map>
				<entry key="android">
					<bean class="com.pets.shiro.filter.MobileTokenAuthentication">
					</bean>
				</entry>
				<entry key="authc">
					<bean class="com.pets.shiro.filter.LoginAuthenticationFilter">
					</bean>
					<!-- <bean class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
					</bean> -->
				</entry>
			</map>
		</property>
	</bean>

/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判断!






shiro 实现自定义权限规则校验,布布扣,bubuko.com

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

标签:shiro

原文地址:http://blog.csdn.net/cml_blog/article/details/37657217

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!