shiro 基於角色粗粒度與URL細粒度權限控制實現


shiro 注解方式的權限控制基於代理實現,

  如果寫了用了多個注解會按照內定的順序一個一個驗證, 而不是按使用的先后順序.

  RequiresRoles
  RequiresPermissions
  RequiresAuthentication
  RequiresUser
  RequiresGuest

 

 

  @Bean
  @DependsOn({"lifecycleBeanPostProcessor"})
  public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
   DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
   advisorAutoProxyCreator.setProxyTargetClass(true);
   return advisorAutoProxyCreator;
  }

        //權限控制map
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();

     //filterChainDefinitionMap.put("/user/**", "roles[user]");
filterChainDefinitionMap.put("/user/**", "perms[user]");
filterChainDefinitionMap.put("/account/**", "perms[account]");

    
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
Set<String> set = new HashSet<String>();
     //set.add("users");
     //info.setRoles(set);
set.add("user");
info.setStringPermissions(set);

return info;


 

url基於過濾器實現:

  //自定義過濾器
  Map<String, Filter> filterMap = new LinkedHashMap<>();
  shiroFilterFactoryBean.setFilters(filterMap);

  filterChainDefinitionMap.put("/user/**", "authc");
  filterChainDefinitionMap.put("/**", "authc");
  filterChainDefinitionMap.put("/user/**", "requestURL"); //必須在/**,authc之前添加被控制的路徑

    @Autowired
IPermissionService permissionService;

public static URLPathMatchingFilter testUtils;

   // @Autowired 注入失敗 使用此方式 @PostConstruct
@PostConstruct
public void init() {
testUtils = this;
}

  
  //保存當前地址並重定向到登錄界面  參考張開濤大神的<跟我學shiro>
  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse resp = (HttpServletResponse) response;
  saveRequestAndRedirectToLogin(req, resp);
  return false;


 

 項目源碼地址 (問題多多,請不吝賜教)

 









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM