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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

shiro表单认证(系统默认的form认证器)

發布時間:2025/3/20 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shiro表单认证(系统默认的form认证器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

1.shiro表單認證流程

2.shiro認證代碼

2.1 頁面代碼

這里的method值必須為post,否則不會執行認證過程而直接執行在spring.xml里配置的loginUrl指定的路徑 <form action="<%=basePath%>login.do" method="post"> username:<input type="text" name="username"><p> password:<input type="password" name="password"> <p>${msg} <input type="submit" value="submit"> </form>

2.2 web.xml文件需要添加的代碼

<filter-name>標簽里的過濾器名字,應與spring.xml里配置的過濾器名一致

<filter> <filter-name>shiroFilter</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

2.3 控制器代碼

realm 認證不通過時,會將錯誤信息添加到request中,這樣在下面的方法中,可通過shiroLoginFailure這個鍵獲取到錯誤信息的類名。

// 用戶登陸提交 @RequestMapping("/login.do") public String loginsubmit(HttpServletRequest request,Model model)throws Exception {// shiro在認證過程中出現錯誤后將異常類路徑通過request返回String exceptionClassName = (String) request.getAttribute("shiroLoginFailure");if(exceptionClassName!=null){if (UnknownAccountException.class.getName().equals(exceptionClassName)) {System.out.println("賬號不存在");} else if (IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {System.out.println("用戶名/密碼錯誤");} else if("randomCodeError".equals(exceptionClassName)){System.out.println("驗證碼錯誤");} else{System.out.println("未知錯誤");}}return "/login.jsp"; }

2.3 自定義realm的代碼

/**** * 自定義Realm * * @author Peter* @date 2016-06-03 * */ public class MyShiroRealm extends AuthorizingRealm { @Overridepublic String getName() {return"customRealm";}// 支持什么類型的token@Overridepublic boolean supports(AuthenticationToken token) {return token instanceof UsernamePasswordToken;}/*** * 獲取授權信息 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pc) { //省略...... return null; } /*** * 獲取認證信息 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken at) { UsernamePasswordToken token = (UsernamePasswordToken) at; //這里也有用戶名與密碼 // 接收表單的用戶名 String username = (String) at.getPrincipal();if (username != null && !"".equals(username)) { //通過用戶名去數據查回用戶操作//省略......//模擬數據庫查加的用戶名為:"張春玲",密碼為:"123456"if("張春玲".equals(username) && "123456".equals(token.getUsername())){}else{throw new IncorrectCredentialsException(); //拋出密碼錯誤異常 }} else{throw new UnknownAccountException(); //沒有該用戶異常} return null; } }

2.4 spring.xml需要添加的代碼

注意,loginUrl指定的路徑必須是authc(即認證通過才可訪問),否則請求不會被realm攔截而直接執行了loginUrl指定的路徑

<!-- Shiro的Web過濾器 --><!-- loginUrl認證提交地址,如果沒有認證將會請求此地址進行認證,請求此地址將由formAuthenticationFilter進行表單認證 --><!-- successUrl可配置登錄成功后的跳轉路徑,如果不配的話,就自動跳轉到請求登錄時的路徑,即上一個路徑。所以建議不配 --><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="filterChainDefinitions"><value>/login.do = authc<!-- 登錄的地址必須是authc,不然也不會執行realm而直接執行登錄路徑了 --> /** = authc <!-- user表示身份認證通過或通過記住我認證通過的可以訪問 --></value></property> </bean><!-- 注入 --><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>

總結

以上是生活随笔為你收集整理的shiro表单认证(系统默认的form认证器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。