一、在web.xml中加入shiro過濾器
<!-- Shiro過濾器--><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>
二、在Spring的applicationContext.xml中加入shiro配置
1.添加shiroFilter定義
<!-- Shiro 過濾器--><bean id="shiroFilter"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login" /> <property name = "successUrl" value="/user/list" /> <property name="unauthorizedUrl" value="/login" /> <property name="filterChainDefinitions"> <值> /login = anon /user/** = authc /role/edit/* = perms[role:edit] /role/save = perms[role:edit] /role/list = perms[role:view] /** = authc </value> </property>< /豆>
2、新增securityManager定義
複製程式碼如下:
<bean id="安全管理器">
<屬性名稱=“領域”參考=“myRealm”/>
</豆>
3、添加領域定義
複製程式碼如下:
<bean id="myRealm"/>
三、實作MyRealm:繼承AuthorizingRealm,並重寫認證授權方法
公共類別 MyRealm 擴充了 AuthorizingRealm{ 私人 AccountManager accountManager;公共無效 setAccountManager(AccountManager accountManager) { this.accountManager = accountManager; } /** * 授權資訊 */ protected AuthorizationInfo doGetAuthorizationInfo( PrimaryCollectionprincipals) { String username=(String)principals.fromRealm(getName()).iterator().next(); if( 使用者名稱 != null ){ 使用者 user = accountManager.get( 使用者名稱 ); if( user != null && user.getRoles() != null ){ SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); for( SecurityRole every: user.getRoles() ){ info.addRole(each.getName()); info.addStringPermissions(each.getPermissionsAsString());返回訊息;返回 null; } /** * 認證資訊 */ protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authcToken ) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; String userName = token.getUsername(); if( userName != null && !"".equals(userName) ){ 使用者 user = accountManager.login(token.getUsername(), String.valueOf(token.getPassword())); if( user != null ) return new SimpleAuthenticationInfo( user.getLoginName(),user.getPassword(), getName());返回空值; }}
參考資料:讓 Apache Shiro 保護你的應用