shiro框架--權限管理
阿新 • • 發佈:2017-07-01
erp att equal context generate servle req ssi chain
一.maven坐標
1 <!-- 權限控制 框架 --> 2 <dependency> 3 <groupId>org.apache.shiro</groupId> 4 <artifactId>shiro-all</artifactId> 5 <version>${shiro.version}</version> 6 </dependency>
二.shiro框架的四大功能
1.認證
2.授權
3.加密
4.權限管理
三.shiro框架環境搭建
1.導入maven坐標
2.在web.xml中配置spring提供的框架,用戶整合shiro框架
1 <!-- 配置spring框架過濾器用於整合shiro框架 --> 2 <filter> 3 <filter-name>shiroFilter</filter-name> 4 <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>shiroFilter</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping>
註意,此配置一定要在struts配置之前
3.配置shiro框架相關對象
在spring配置文件applicationContext.xml中註冊shiroFilter在spring配置文件applicationContext.xml中註冊shiroFilter
1 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 2 <!-- 註入shiro框架核心對象,安全管理器 --> 3 <property name="securityManager" ref="securityManager"/> 4 <!--private String loginUrl;登錄頁面 5 private String successUrl;登錄成功後跳轉頁面 6 private String unauthorizedUrl;權限不足時的提示頁面--> 7 <property name="loginUrl" value="/login.html"/> 8 <property name="successUrl" value="/index.html"/> 9 <property name="unauthorizedUrl" value="/unauthorized.html"/> 10 <!-- 指定URL攔截規則 --> 11 <property name="filterChainDefinitions"> 12 <!--authc:代表shiro框架提供的一個過濾器,這個過濾器用於判斷當前用戶是否已經完成認證, 13 如果當前用戶已經認證,就放行,如果當前用戶沒有認證,跳轉到登錄頁面 14 anon:代表shiro框架提供的一個過濾器,允許匿名訪問--> 15 <value> 16 /css/* = anon 17 /images/* = anon 18 /js/** = anon 19 /validatecode.jsp* = anon 20 /userAction_login.action = anon 21 /** = authc 22 </value> 23 </property> 24 </bean>
註冊安全管理器對象
1 <!-- 註冊安全管理器 --> 2 <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 3 <property name="realm" ref="bosRealm"></property> 4 </bean>
4.登錄功能的action
@ParentPackage("struts-default") @Namespace("/") @Scope("prototype") @Controller public class UserAction extends CommonAction<User> { //屬性註入ckeckcode private String checkcode; public void setCheckcode(String checkcode) { this.checkcode = checkcode; } //用戶登錄功能 @Action(value="userAction_login",[email protected](name="home",location="/index.html",type="redirect"), @Result(name="login",location="/login.html",type="redirect")}) public String login(){ //從Session中獲得驗證碼 String validatecode = (String) ServletActionContext.getRequest().getSession().getAttribute("key"); if(StringUtils.isNotBlank(checkcode) && StringUtils.isNotBlank(validatecode) && validatecode.equals(checkcode)){ //驗證碼驗證通過 //獲得當前用戶 Subject subject = SecurityUtils.getSubject(); //獲得用戶名密碼令牌 AuthenticationToken token = new UsernamePasswordToken(getModel().getUsername(),getModel().getPassword()); try { subject.login(token); User user = (User) subject.getPrincipal(); ServletActionContext.getRequest().getSession().setAttribute("loginUser", user); return "home"; } catch (AuthenticationException e) { e.printStackTrace(); } }else{ //驗證碼輸入錯誤 return LOGIN; } return LOGIN; } }
5.自定義realm
1 public class BosRealm extends AuthorizingRealm{ 2 3 @Override 4 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { 5 // TODO Auto-generated method stub 6 return null; 7 } 8 9 @Autowired 10 private UserDao userDao; 11 /** 12 * 認證方法 13 */ 14 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 15 UsernamePasswordToken passwordToken = (UsernamePasswordToken) token; 16 String username = passwordToken.getUsername(); 17 //查詢數據庫 18 User user = userDao.findByUsername(username); 19 if(user == null){ 20 return null ; 21 } 22 AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName()); 23 return info; 24 } 25 }
註冊自定義realm
<bean id="bosRealm" class="com.itheima.bos.service.realm.BosRealm"></bean>
shiro框架--權限管理