shiro認證的一些流程

spring shiro的過濾器配置
<!-- 基于Form表單的身份驗證過濾器 -->
<bean id="formAuthenticationFilter" class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
    <property name="usernameParam" value="username"/>
    <property name="passwordParam" value="password"/>
    <property name="rememberMeParam" value="rememberMe"/>
    <property name="loginUrl" value="/login"/>
</bean>
<!-- Shiro的Web過濾器 此id名稱應該與web.xml文件中的配置名稱一致-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"/>
    <property name="loginUrl" value="/login"/>
    <property name="filters">
        <util:map>
            <entry key="authc" value-ref="formAuthenticationFilter"/>
            <entry key="sysUser" value-ref="sysUserFilter"/>
            <!--添加ssl支持-->
            <!--<entry key="ssl" value-ref="sslFilter"/>-->
            <!-- 結(jié)束ssl支持-->
        </util:map>
    </property>
    <property name="filterChainDefinitions">
        <value>
            /login=authc
            /logout=logout
            /authenticated=authc
            /**=user,sysUser
        </value>
    </property>
</bean>
登陸的action
@RequestMapping(value = "/login"    )
public String showLoginForm(HttpServletRequest req, Model model) {
    String exceptionClassName = (String)req.getAttribute("shiroLoginFailure");
    String error = null;
    if(UnknownAccountException.class.getName().equals(exceptionClassName)) {
        error = "用戶名/密碼錯誤";
    } else if(IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
        error = "用戶名/密碼錯誤";
    } else if(exceptionClassName != null) {
        error = "其他錯誤:" + exceptionClassName;
    }
    model.addAttribute("error", error);
    return "login";
}
登陸表單頁面
<html>
<head>
    <title>登錄</title>
    <style>.error{color:red;}</style>
</head>
<body>

<div class="error">${error}</div>
<form action="" method="post">
    用戶名:<input type="text" name="username" value="<shiro:principal/>"><br/>
    密碼:<input type="password" name="password"><br/>
    自動登錄:<input type="checkbox" name="rememberMe" value="true"><br/>
    <input type="submit" value="登錄">
</form>

</body>
</html>
兩個情況說明:
  • 在瀏覽器中輸入地址: localhost:8080/ 的流程
    配置文件中/**=user,sysUser揖膜,所以先走 UserFilter 這個過濾器
    此時用戶未登陸孟岛,在UserFilter 過濾器中建芙,會重定向到 /login,進入登陸頁面瘪贱,并且記住此時的請求地址 "/"
     在頁面中輸入用戶名密碼稻艰,此時action=""是這樣的涯鲁,當點擊提交按鈕時同木,表單會提交到 當前的地址 "/login",post方法而且?guī)е脩裘兔艽a
    /login=authc 因為這個配置黍氮,會經(jīng)過FormAuthenticationFilter這個過濾器唐含,該類會判斷此請求是否為登陸請求,如果是沫浆,則走登陸流程(subject.login(xxx))捷枯,登陸成功后, 會重現(xiàn)跳轉(zhuǎn)到 上次保存的請求地址 ”/"
  • 在瀏覽器中輸入地址:localhost:8080/login
    /login=authc 因為這個配置专执,會經(jīng)過FormAuthenticationFilter這個過濾器淮捆,
    該類會判斷此請求是否為登陸請求,如果是,則走登陸流程(subject.login(xxx))争剿,
    登陸成功后已艰, 因為沒有其他的求情痊末,成功后會直接跳轉(zhuǎn)到successUrl蚕苇;如果沒有配置,默認是”/"

看一下FormAuthenticationFilter的繼承關(guān)系

522024-20170106175648972-643940969.png
重要的方法
 public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
    return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);
}

先判斷是否已經(jīng)授權(quán)凿叠,如果沒有再判斷是否是登陸請求

shiro的認證流程
522024-20170106172237019-1331775620.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涩笤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盒件,更是在濱河造成了極大的恐慌蹬碧,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炒刁,死亡現(xiàn)場離奇詭異恩沽,居然都是意外死亡,警方通過查閱死者的電腦和手機翔始,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門罗心,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人城瞎,你說我怎么就攤上這事渤闷。” “怎么了脖镀?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵飒箭,是天一觀的道長。 經(jīng)常有香客問我蜒灰,道長弦蹂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任强窖,我火速辦了婚禮盈匾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毕骡。我一直安慰自己削饵,他們只是感情好,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布未巫。 她就那樣靜靜地躺著窿撬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叙凡。 梳的紋絲不亂的頭發(fā)上劈伴,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼跛璧。 笑死严里,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的追城。 我是一名探鬼主播刹碾,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼座柱!你這毒婦竟也來了迷帜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤色洞,失蹤者是張志新(化名)和其女友劉穎戏锹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體火诸,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡锦针,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了置蜀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奈搜。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盾碗,靈堂內(nèi)的尸體忽然破棺而出媚污,到底是詐尸還是另有隱情,我是刑警寧澤廷雅,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布耗美,位于F島的核電站,受9級特大地震影響航缀,放射性物質(zhì)發(fā)生泄漏商架。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一芥玉、第九天 我趴在偏房一處隱蔽的房頂上張望蛇摸。 院中可真熱鬧,春花似錦灿巧、人聲如沸赶袄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饿肺。三九已至,卻和暖如春盾似,著一層夾襖步出監(jiān)牢的瞬間敬辣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溉跃,地道東北人村刨。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像撰茎,于是被迫代替她去往敵國和親嵌牺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理乾吻,服務發(fā)現(xiàn)髓梅,斷路器拟蜻,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 一绎签、架構(gòu) 要學習如何使用Shiro必須先從它的架構(gòu)談起,作為一款安全框架Shiro的設計相當精妙酝锅。Shiro的應用...
    ITsupuerlady閱讀 3,528評論 4 32
  • 點擊上面的藍字關(guān)注我們哦诡必! 你一定要幸福才好 文/李沐遙 圖/網(wǎng)絡 少年時,喜歡你就要難為你 要你生氣搔扁,看你臉紅 ...
    李沐遙閱讀 221評論 2 1
  • 文/李周洋 通化古鎮(zhèn)爸舒,文韻深厚,人民勤勞稿蹲。 昔隋唐三王扭勉,各有絕學; 王勃閣序苛聘,千年傳抄涂炎。 酒圣王績,田園詩祖设哗,嗜飲...
    簡單明了閱讀 648評論 0 2
  • 比特幣ETF上市的影響將是很大的唱捣,因此才受到諸多關(guān)注,投資者自然是期待可以通過審批网梢,可是目前就美國證券交易委員會的...
    燭微慮遠閱讀 190評論 0 1