shiro android

shiro 實現自定義權限規則校驗

<span style="font-family: Arial, Helvetica, sans-serif;">在系統中使用shiro進行權限管理,當用戶訪問沒有權限的資源時會跳轉到指定的登陸url。</span>

可是若是系統中支持手機app,手機訪問時沒有使用session進行登陸憑證管理,而是使用token,有兩種解決方法:html

1:支持手機客戶端訪問的資源在權限配置中配置成anonjava

2:實現自定義認證攔截器,對用戶請求資源進行認證android

顯然第一種方法不適用,這些資源應該只能讓咱們本身的app進行訪問。web

第二中實現方式:spring

<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); }

只須要重寫apache

onAccessDenied方法,進行token判斷!session

相關文章
相關標籤/搜索