shiro 통합 swagger 주의사항

5530 단어 shiroswagger
swagger 는 좋 은 rest api 관리 도구 입 니 다.최근 에 shiro 기반 권한 제어 가 통합 되 어 문제 가 생 겼 습 니 다.http://localhost:8080/swagger-ui.html 접근 이 정상 적 이지 않 습 니 다.문 제 는 shiro 가 통과 하지 않 아서 생 긴 것 입 니 다.
shiro 설정
shiro Filter 의 설정 은 다음 과 같 습 니 다.

@Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        //Shiro       ,        
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        Map<String, Filter> filterMap = new LinkedHashMap<>();
        filterMap.put("authc", new AjaxPermissionsAuthorizationFilter());
        shiroFilterFactoryBean.setFilters(filterMap);
        /*  shiro     Map  
         * Map key(xml   value )    '/'         HttpServletRequest.getContextPath()    
         * anon:            ,     ,  .do .jsp   *    ,   login.jsp?main  
         * authc:                 ,  Shiro        org.apache.shiro.web.filter.authc.FormAuthenticationFilter
         */
        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
         /*      ,        ,    / **       :      ,           ;
          authc:  url            ; anon:  url         */
        filterChainDefinitionMap.put("/", "anon");
        filterChainDefinitionMap.put("/static/**", "anon");
        filterChainDefinitionMap.put("/login/auth", "anon");
        filterChainDefinitionMap.put("/login/logout", "anon");
        filterChainDefinitionMap.put("/error", "anon");
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }
우선 일반적인 필터 줄 은 다음 과 같 습 니 다.

filterChainDefinitionMap.put("/swagger-ui.html", "anon");
filterChainDefinitionMap.put("/swagger-resources", "anon");
filterChainDefinitionMap.put("/v2/api-docs", "anon");
filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon");
shiro 를 다시 열 고 실행 합 니 다.swagger 2 페이지 는 정상적으로 접근 하지만 프로그램 로그 출력 은 접근 할 수 있 는 권한 이 있 습 니 다.오류 가 발생 했 습 니 다.
그래서 계속 조사 하고 제 한 된 요 구 는 다음 과 같다.

http://localhost:8080/configuration/security
http://localhost:8080/configuration/ui
그래서 계속 줄 추가:

filterChainDefinitionMap.put("/configuration/security", "anon");
filterChainDefinitionMap.put("/configuration/ui", "anon");
최종 설정:

@Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        //Shiro       ,        
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        Map<String, Filter> filterMap = new LinkedHashMap<>();
        filterMap.put("authc", new AjaxPermissionsAuthorizationFilter());
        shiroFilterFactoryBean.setFilters(filterMap);
        /*  shiro     Map  
         * Map key(xml   value )    '/'         HttpServletRequest.getContextPath()    
         * anon:            ,     ,  .do .jsp   *    ,   login.jsp?main  
         * authc:                 ,  Shiro        org.apache.shiro.web.filter.authc.FormAuthenticationFilter
         */
        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
         /*      ,        ,    / **       :      ,           ;
          authc:  url            ; anon:  url         */
        filterChainDefinitionMap.put("/", "anon");
        filterChainDefinitionMap.put("/static/**", "anon");
        filterChainDefinitionMap.put("/login/auth", "anon");
        filterChainDefinitionMap.put("/login/logout", "anon");
        filterChainDefinitionMap.put("/error", "anon");
        //swagger  
        filterChainDefinitionMap.put("/swagger-ui.html", "anon");
        filterChainDefinitionMap.put("/swagger-resources", "anon");
        filterChainDefinitionMap.put("/v2/api-docs", "anon");
        filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon");
        filterChainDefinitionMap.put("/configuration/security", "anon");
        filterChainDefinitionMap.put("/configuration/ui", "anon");
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }
메모:filter Chain DefinitionMap.put("/**","authc")는 맨 뒤에 두 어야 합 니 다.
최종 결과:접근http://localhost:8080/api/swagger-ui.html 출현

이상 은 shiro 통합 swagger 가 주의해 야 할 부분 에 대한 상세 한 내용 입 니 다.shiro 통합 swagger 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기