日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shiro表单登录认证及退出(自定义form认证器)

發(fā)布時(shí)間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shiro表单登录认证及退出(自定义form认证器) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

博主地址:http://blog.csdn.net/zcl_love_wx
注意:此文是基于springMVC框架的,所以關(guān)于springMVC的配置這里不說,后面有時(shí)間專門寫一個shiro整合spring的文章

1.自定義form認(rèn)證器

自定義的form表單認(rèn)證器需要繼承FormAuthenticationFilter類,我們先看看該類里面有哪些變量

public static final String DEFAULT_ERROR_KEY_ATTRIBUTE_NAME = "shiroLoginFailure";public static final String DEFAULT_USERNAME_PARAM = "username"; public static final String DEFAULT_PASSWORD_PARAM = "password"; public static final String DEFAULT_REMEMBER_ME_PARAM = "rememberMe";private static final Logger log = LoggerFactory.getLogger(FormAuthenticationFilter.class);private String usernameParam = DEFAULT_USERNAME_PARAM; private String passwordParam = DEFAULT_PASSWORD_PARAM; private String rememberMeParam = DEFAULT_REMEMBER_ME_PARAM;private String failureKeyAttribute = DEFAULT_ERROR_KEY_ATTRIBUTE_NAME;

由上面代碼可看出,我們可以通過usernameParam等參數(shù)配置表單認(rèn)證時(shí)form表單里的input框的名字,即常說的字段。默認(rèn)時(shí)為username、password、rememberMe。

自定義form認(rèn)證器的代碼:

public class MyFormAuthenticationFilter extends FormAuthenticationFilter{/*** 校驗(yàn)驗(yàn)證碼* * 原FormAuthenticationFilter的認(rèn)證方法* 該方法會在realm前調(diào)用 * 由于驗(yàn)證碼是我們自己生成存在session里的,所以我們需要在登錄時(shí)判斷驗(yàn)證碼是否成功就可用該方法* * 驗(yàn)證碼為空或驗(yàn)證成功 繼續(xù)執(zhí)行父類的onAccessDenied方法* 驗(yàn)證碼不為空且驗(yàn)證失敗,返回true則不再走realm,直接進(jìn)控制器的login.do*/@Overrideprotected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object map) throws Exception {// 從session獲取正確的驗(yàn)證碼HttpSession session = ((HttpServletRequest)request).getSession();//頁面輸入的驗(yàn)證碼String randomcode = request.getParameter("rememberMe");//從session中取出驗(yàn)證碼//String validateCode = (String) session.getAttribute("validateCode");String validateCode = "123456";if (randomcode != null && validateCode != null) {if (!randomcode.equals(validateCode)) {//如果校驗(yàn)失敗,將驗(yàn)證碼錯誤失敗信息,通過shiroLoginFailure設(shè)置到request中request.setAttribute("shiroLoginFailure", "randomCodeError");//拒絕訪問,不再校驗(yàn)賬號和密碼return true;}}return super.onAccessDenied(request, response, map);} }

2. 在shiro配置文件里添加代碼

添加濾器里

<!-- 注入自定義認(rèn)證過濾哭喊 --> <bean id="myFormAuthenticationFilter" class="com.mvc.filter.MyFormAuthenticationFilter"><!-- 配置表單中賬號的input名稱 --><property name="usernameParam" value="username"/><!-- 配置表單中密碼的input名稱 --><property name="passwordParam" value="password"/> </bean><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager"/><property name="loginUrl" value="/login.do"/><property name="unauthorizedUrl" value="/refuse.jsp"/><property name="filters"><map> <!-- 自定義表單認(rèn)證的過慮器 --><entry key="authc" value-ref="myFormAuthenticationFilter"/><!-- 這里可以添加多個重定義的過濾器 --></map></property><!-- 過慮器鏈定義,從上向下順序執(zhí)行,一般將/**放在最下邊 --><property name="filterChainDefinitions"><value>/login.do = authc/logout.do = logout /refuse.jsp = anon/** = authc</value></property> </bean><!-- 注入自定義realm --><bean id="myShiroRealm" class="com.mvc.realm.MyShiroRealm"> </bean> <!-- 安全管理器 --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myShiroRealm"></property> </bean>

其余參見:http://blog.csdn.net/zcl_love_wx/article/details/51577058

總結(jié)

以上是生活随笔為你收集整理的shiro表单登录认证及退出(自定义form认证器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。