1. 程式人生 > >shiro框架--權限管理

shiro框架--權限管理

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框架--權限管理