Shiro-實現認證
阿新 • • 發佈:2018-12-23
只需要認證,直接繼承AuthenticatingRealm 類就可以了
package com.atguigu.shiro.realms; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.realm.AuthenticatingRealm; /** * * @author Lee * */ public class ShiroRealm extends AuthenticatingRealm { private static final String MONSTER = "monster"; private static final String UNKNOW = "unknow"; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // 1、將AuthenticationToken轉換為UsernamePasswordToken UsernamePasswordToken upToken = (UsernamePasswordToken) token; // 2、從UsernamePasswordToken中獲取username String username = upToken.getUsername(); // char[] password = upToken.getPassword(); // 3、從資料庫中獲取username對應的記錄 System.out.println("從資料庫中查詢" + username + "對應的記錄"); // 4、若使用者不存在丟擲UnknownAccountException異常 if (UNKNOW.equals(username)) { throw new UnknownAccountException("使用者不存在"); } // 5、根據使用者的資訊決定是否丟擲AuthenticationException異常 if (MONSTER.equals(username)) { throw new LockedAccountException("使用者被鎖定"); } // 6、根據使用者情況,構建 AuthenticationInfo 物件並返回 // 一下資訊是從資料庫中獲取 // 1)principal:認證的實體資訊,可以是username,也可以是資料表對應的使用者的實體類物件。 Object principal = username; // 2) credentials:密碼 Object credentials = "123456"; // 3) realmName:當前realm物件的name,呼叫父類的getName()方法獲取 String realmName = getName(); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principal, credentials, realmName); return info; } }
如果登陸成功後,之後在進行認證會從緩衝中直接獲取,不會經過Realm,所以若需要重新登陸,需要先登出,再進行登陸。
登出有登出的過濾器,直接配置登出的URL使用即可
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login.jsp" /> <property name="successUrl" value="/list.jsp" /> <property name="unauthorizedUrl" value="/unauthorized.jsp" /> <!-- 配置哪些頁面需要保護 以及訪問頁面的許可權 攔截器:(這裡的url支援Ant風格模式) 1).anon 可以被匿名訪問 2) .authc 需要認證才能訪問 3) .logout 登出過濾器 這裡的url優先匹配 --> <property name="filterChainDefinitions"> <value> /login.jsp = anon /shiro/login = anon /shiro/logout = logout # everything else requires authentication: /** = authc /list.jsp = anon </value> </property> </bean>