国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

cas+shiro實現不時時的去請求cas進行身份驗證

2019-11-14 14:49:44
字體:
來源:轉載
供稿:網友

cas+shiro不進行時時去cas驗證身份信息,需要用shiro在當前系統有一份完整的認證機構。

那么有一個問題,什么時候去cas校驗信息,目前的配置方式:

  cas系統設置默認的瀏覽器session存活時間,當前系統的session存活時間為30分鐘,那么當當前系統身份驗證失敗是,去cas校驗。

  這里涉及到一個非常重要的節點,就是shiro框架內部是怎么進行cas校驗的呢,請看代碼:

    org.apache.shiro.web.filter.accessControlFilterd還是所有默認驗證類的父類,

    父類中的redirectToLogin方法就是去請求cas服務器,重新獲取驗證信息

/**     * Convenience method for subclasses that merely acquires the {@link #getLoginUrl() getLoginUrl} and redirects     * the request to that url.     * <p/>     * <b>N.B.</b>  If you want to issue a redirect with the intention of allowing the user to then return to their     * originally requested URL, don't use this method directly.  Instead you should call     * {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse)     * saveRequestAndRedirectToLogin(request,response)}, which will save the current request state so that it can     * be reconstructed and re-used after a successful login.     *     * @param request  the incoming <code>ServletRequest</code>     * @param response the outgoing <code>ServletResponse</code>     * @throws IOException if an error occurs.     */    PRotected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {        String loginUrl = getLoginUrl();        WebUtils.issueRedirect(request, response, loginUrl);    }

    

    現在要解決一個問題,就是當前系統的身份驗證信息過期了,這個時候頁面向后臺發起了一個Ajax請求,那么后臺拿到這個請求之后直接對這個請求進行轉發到cas服務就會出現一個問題:跨域問題。

   參考解決辦法:因為我的所有后臺除了首頁是用默認的org.apache.shiro.web.filter.authc.AnonymousFilter類進行身份驗證,其他的請求都是通過

org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter進行的權限驗證,又因為PermissionsAuthorizationFilter繼承了AccessControlFilterd
所以我的解決辦法就是創建一個自己的
PermissionsAuthorizationFilter覆蓋AccessControlFilterd的redirectToLogin方法

    

import java.io.IOException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;import com.chenrd.shiro.AuthorRuntimeException;/** * 最最重要的一點,解決了頁面沒有刷新點擊功能,但是后臺的author已經被注銷的情況下會去發送cas請求而產生的跨域問題 *  * @author chenrd * @version 2015年12月11日 * @see MyPermissionsAuthorizationFilter * @since */public class MyPermissionsAuthorizationFilter extends PermissionsAuthorizationFilter{        @Override    protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {        throw new AuthorRuntimeException("身份異常,不進行轉發到登錄頁面");        /*String loginUrl = getLoginUrl();        WebUtils.issueRedirect(request, response, loginUrl);*/    }}

  然后在shiro的配置文件里面修改如下:

  

    <bean id="myPermissionsAuthorizationFilter" class="com.chenrd.shiro.filter.MyPermissionsAuthorizationFilter"/>        <bean id="filterChainManager" class="com.chenrd.shiro.filter.CustomDefaultFilterChainManager">        <property name="loginUrl" value="${cas.url}/login?service=${apply.url}/cas"/>        <property name="successUrl" value="/"/>        <property name="unauthorizedUrl" value="/authority"/>        <property name="customFilters">              <util:map>                  <entry key="cas" value-ref="casFilter"/>
          <!--替換默認的權限控制類--> <entry key="perms" value-ref="myPermissionsAuthorizationFilter"/> </util:map> </property> <property name="defaultFilterChainDefinitions"> <value> /login=anon /cas=cas /jaxws/services/**=anon /**=authc </value> </property> </bean>

 

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍山县| 衡山县| 昔阳县| 昌都县| 南江县| 铜鼓县| 林口县| 科尔| 临颍县| 新巴尔虎左旗| 汽车| 井研县| 蓬莱市| 石嘴山市| 孟州市| 白山市| 郸城县| 博野县| 湘西| 华容县| 台前县| 东丽区| 辉南县| 丹棱县| 阜阳市| 图们市| 乐都县| 武宁县| 剑川县| 达拉特旗| 施秉县| 思茅市| 徐水县| 南靖县| 德保县| 惠州市| 靖安县| 昭觉县| 横山县| 怀仁县| 大宁县|