shiro 实现自定义权限规则校验
2014-07-10 15:46
351 查看
<span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户访问没有权限的资源时会跳转到指定的登录url。</span>
但是如果系统中支持手机app,手机访问时没有使用session进行登录凭证管理,而是使用token,有两种解决方法:
1:支持手机客户端访问的资源在权限配置中配置成anon
2:实现自定义认证拦截器,对用户请求资源进行认证
显然第一种方法不适用,这些资源应该只能让我们自己的app进行访问。
第二中实现方式:
只需要重写onAccessDenied方法,进行token判断!
但是如果系统中支持手机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- session,自定义FormAuthenticationFilter(表单认证器)-->实现验证码校验
- shiro实现权限校验和session共享
- 使用shiro进行登录校验;自定义realm的实现
- 自定义注解实现权限设计,实现pojo校验
- 类Shiro权限校验框架的设计和实现
- Spring AOP+反射实现自定义动态配置校验规则,让校验规则飞起来
- 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
- 细粒度 自定义注解 权限控制具体实现
- 使用HttpMoudle和IPrincipal实现自定义身份及权限认证
- Castle AOP 系列(四):实现一个简单的基于上下文调用的权限校验机制
- 中国特色管理类软件项目开发之通用权限必杀技 -- 权限自由配置设定、实现智能化自动检测校验
- Swing 实现简单的自定义不规则按钮组件2
- AutoCompleteTextView 实现自定义匹配规则提示
- SQL如何实现自定义排序规则
- 通过盘古分词自定义规则功能实现软件版本号的提取
- 使用HttpMoudle和IPrincipal实现自定义身份及权限认证
- 中国特色管理类软件项目开发之通用权限必杀技 -- 权限自由配置设定、实现智能化自动检测校验
- 在SQL和ERWIN中用自定义类型、规则和默认值实现check约束从而保证数据的完整性
- 中国特色管理类软件项目开发之通用权限必杀技 -- 权限自由配置设定、实现智能化自动检测校验
- 使用HttpMoudle和IPrincipal实现自定义身份及权限认证