国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

spring-shiro 基本使用

klinson / 1339人閱讀

摘要:配置配置核心控制器過濾器配置同時在中配置匿名的不需要權限需要認證通過即登錄成功需要名稱為的權限需要名稱為的角色說明匹配的的是匹配的是多個比如

maven配置
      
      
        org.apache.shiro  
        shiro-web  
        ${shiro-version}  
      
      
      
        org.apache.shiro  
        shiro-spring  
        ${shiro-version}  
      
      
      
        org.apache.shiro  
        shiro-ehcache  
        ${shiro-version}  
      
    ...
    
        1.2.4
    
spring配置
    
 
  

  

      
  

  
  
      
      
    
    
    
        
            
                
            
        
      
      
          
            /logout.do        = anon    
            /image/*.do        = authc    
            /blog/**.do        = authc,perms[blog] 
            /admin/*.do        = authc,roles[admin] 
            
          
      
  
web.xml
  
    shiroFilter  
    org.springframework.web.filter.DelegatingFilterProxy  
      
        targetFilterLifecycle  
        true  
      
  
  
    shiroFilter  
    *.do  
    



    sitemesh
    org.sitemesh.config.ConfigurableSiteMeshFilter


    sitemesh
    *.do



    springmvc
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath:app-servlet.xml
        
    
    1



    springmvc
    *.do

PS : shiro filter,放在mvc的filter/servlet前面,如果有sitemesh,放在sitemesh前面

Realm類
/**
 * 登錄和檢查授權的時候調用當前類
 */
@Component("DefaultRealm")
public class DefaultRealm extends AuthorizingRealm {

  @Resource
  private AdminDao adminDao;

  public DefaultRealm() {
    setName("DefaultRealm");// This name must match the name in the User  
  }

  //獲取授權信息, 用于驗證權限
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    String username = (String) principalCollection.getPrimaryPrincipal();
    AdminUser admin = adminDao.getUniqueByProperty("username", username);
    Set roleSet = admin.getRoles();
    if (roleSet != null) {
      //獲取角色權限
      Set roles = new HashSet<>();
      Set stringPermissions = new HashSet<>();
      for (Role role : roleSet) {
        roles.add(role.getRoleName());

        //封裝到驗證信息
        Set permissions = role.getPermissions();
        for (Permission permission : permissions) {
          stringPermissions.add(permission.getPermissionName());
        }
      }
      
      SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();  
      authorizationInfo.setRoles(roles);  
      authorizationInfo.setStringPermissions(stringPermissions);  
      return authorizationInfo;
    }
    return null;
  }

  //獲取驗證信息,用于登錄驗證用戶名密碼
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken principals)
      throws AuthenticationException {
    String username = (String) principals.getPrincipal();
    if (StringUtils.isNotEmpty(username)) {
      AdminUser admin = adminDao.getUniqueByProperty("username", username);
      SimpleAccount account = new SimpleAccount(username, admin.getPassword(), getName());
      return account;
    }
    return null;
  }

}
MVC登錄驗證
//在MVC的Controller中, 接收參數username和password, 裝配成UsernamePasswordToken對象,
//然后用subject對象login方法進行登錄.
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
subject.login(token);
User-Role-Permission實體類
@Entity
public class User {
    private String username; 
    private String password="";
    //省略getter setter
    
    private Set roles;
    
    @ManyToMany(targetEntity=Role.class)
    public Set getRoles() {
      return roles;
    }

    public void setRoles(Set roles) {
      this.roles = roles;
    }
}

@Entity
public class Role{
  private String roleName;    //省略getter setter
  private Set permissions = new HashSet<>();
  
  @ManyToMany
  public Set getPermissions() {
    return permissions;
  }

  public void setPermissions(Set permissions) {
    this.permissions = permissions;
  }
}  

@Entity
public class Permission {
    private String permissionName;//省略getter setter
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65348.html

相關文章

  • shiro項目介紹

    摘要:項目介紹在之前的整合項目之后,更加完善功能,之前的代碼不予展示與介紹,想了解的請參考整合項目項目代碼獲取功能新增用戶注冊登錄錯誤次數限制使用作緩存注解配置引入數據校驗使用統一異常處理配置項目結構代碼控制層,以下展示注冊和登錄功能會跳到我們自 shiro項目介紹 在之前的shiro整合項目之后,更加完善shiro功能,之前的代碼不予展示與介紹,想了解的請參考shiro整合項目項目代碼獲取...

    ruicbAndroid 評論0 收藏0
  • spring-springmvc-mybatis-shiro項目介紹

    摘要:項目介紹在之前的整合項目之后,新增日志簡單集成,之前的代碼不予展示與介紹,想了解的請參考整合項目項目代碼獲取項目結構代碼控制層,,主要包含登錄及幾個頁面跳轉會跳到我們自定義的中登錄用戶名或密碼錯誤業務處理層,包含一個包,以接口類型存在 spring-springmvc-mybatis-shiro項目介紹 在之前的mybatis整合項目之后,新增日志、簡單集成shiro,之前的代碼不予展...

    fanux 評論0 收藏0
  • PHP程序員學習路線

    摘要:第一階段基礎階段基礎程序員重點把搞熟練核心是安裝配置基本操作目標能夠完成基本的系統安裝,簡單配置維護能夠做基本的簡單系統的開發能夠在中型系統中支持某個功能模塊的開發。本項不做重點學習,除非對前端有興趣。 第一階段:基礎階段(基礎PHP程序員) 重點:把LNMP搞熟練(核心是安裝配置基本操作) 目標:能夠完成基本的LNMP系統安裝,簡單配置維護;能夠做基本的簡單系統的PHP開發;能夠在P...

    genedna 評論0 收藏0
  • 14.java 基本數據類型的包裝類

    摘要:但是基本數據類型不是對象,不具備對象的特性不攜帶屬性沒有方法可調用。自動裝箱即直接賦值將會比使用構造方法的方式節省一塊堆內存空間,并自動入對象池。而手動裝箱使用構造方法會產生兩塊堆內存,而且不會保存在對象池中。 概念 java在設計之初,有一個基本原則:一切皆對象。但是基本數據類型不是對象,不具備對象的特性——不攜帶屬性、沒有方法可調用。為了解決此類問題,Java為每種基本數據類型分別...

    yanbingyun1990 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<