<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 重寫MyRealm中的doGetAuthorizationInfo方法 ``` @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { User user = (User) SecurityUtils.getSubject().getPrincipal(); if(user!=null){ SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); //獲取當前用戶角色 String role = user.getUserRole().getName(); authorizationInfo.addRole(role); //獲取當前用戶的資源ID String [] perms = user.getUserRole().getJurisdiction().getSaid().split(","); for(String prem :perms){ authorizationInfo.addStringPermission(prem); } return authorizationInfo; } return null; } ``` ## 動態配置過濾規則 在resources文件下創建shiro.ini,添加默認的權限配置 格式如下: ``` [urls] #用于 web,提供了對 web url 攔截相關的配置,url=攔截器[參數],攔截器 /index.html = anon /admin/** = authc, roles[admin] ``` 創建MyChainDefinitions動態加載權限配置 ``` import org.apache.shiro.config.Ini; import org.apache.shiro.web.config.IniFilterChainResolverFactory; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import java.io.InputStream; import java.text.MessageFormat; import java.util.Map; public class MyChainDefinitions implements FactoryBean<Ini.Section> { public static final String PREMISSION_STRING = "perms[{0}]"; private InputStream filterChainDefinitions; public void setFilterChainDefinitions(InputStream filterChainDefinitions) { this.filterChainDefinitions = filterChainDefinitions; } @Autowired private JurisdictionService jurisdictionService; @Override public Ini.Section getObject() { /** 查詢數據庫中所有的資源格式為: * url role * 資源路徑,角色,角色1,角色2... */ Map<String,String> urls =JurisdictionService.findByCondition(); //加載配置默認的過濾鏈 Ini ini = new Ini(); ini.load(filterChainDefinitions); Ini.Section section = ini.getSection(IniFilterChainResolverFactory.URLS); if (CollectionUtils.isEmpty(section)) { section = ini.getSection(Ini.DEFAULT_SECTION_NAME); } for (String url : urls.keySet()) { String[] perms = urls.get(url).split(","); StringBuilder permFilters = new StringBuilder(); for (int i = 0; i < perms.length; i++) { permFilters.append(perms[i]).append(","); } //去掉末尾的逗號 String str = permFilters.substring(0, permFilters.length() - 1); //生成結果如:/dotest1.html = authc, perms[admin] section.put(url, MessageFormat.format(PREMISSION_STRING, str)); } return section; } @Override public Class<?> getObjectType() { return this.getClass(); } @Override public boolean isSingleton() { return false; } } ``` ## 修改ShiroConfiguration ``` 1,增加myChainDefinitions方法 private MyChainDefinitions myChainDefinitions(){ MyChainDefinitions myChainDefinitions = new MyChainDefinitions(); ClassPathResource classPathResource = new ClassPathResource("shiro.ini"); try { InputStream inputStream = classPathResource.getInputStream(); myChainDefinitions.setFilterChainDefinitions(inputStream); } catch (IOException e) { e.printStackTrace(); } return myChainDefinitions; },2,修改shiroFilterFactoryBean方法 刪除配置URL的filterChainDefinitionMap 將shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap) 替換為 shiroFilterFactoryBean.setFilterChainDefinitionMap(myChainDefinitions().getObject()); ``` ## 將權限改為|| 之前默認是&& ``` import org.apache.shiro.subject.Subject; import org.apache.shiro.web.filter.authz.AuthorizationFilter; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class AnyPermissionsAuthorizationFilter extends AuthorizationFilter { @Override protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object mappedValue) throws Exception { Subject subject = getSubject(servletRequest, servletResponse); String[] perms = (String[]) mappedValue; for (String perm : perms) { if (subject.isPermitted(perm)) { return true; } } return false; } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看