shiro整合swagger的注意事项

网友投稿 1160 2023-01-22

shiro整合swagger的注意事项

shiro整合swagger的注意事项

swagger是一个很好的rest api管理工具,最近又整合了基于shiro的权限控制,出问题了,http://localhost:8080/swagger-ui.html访问不正常,问题肯定是shiro没放行导致的

shiro 配置

在shiroFilter中的配置如下:

@Bean(name = "shiroFilter")

public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {

ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

//Shiro的核心安全接口,这个属性是必须的

shiroFilterFactoryBean.setSecurityManager(securityManager);

Map 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 filterChainDefinitionMap = new LinkedHashMap<>();

/* 过滤链定义,从上向下顺序执行,一般将 / ** 放在最为下边:这是一个坑呢,一不小心代码就不好使了;

authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问 */

filterChainDefinitionMap.put("/", "anon");

filterChainDefinitionMap.put("/static/**", "anon");

filterChainDefinitionMap.put("/login/auth", "anon");

filterChainDefinitionMap.put("/login/logout", "anon");

http:// 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,运行,swagger2页面访问正常,但是程序日志输出依然有权限访问出错

于是继续排查,受限请求如下:

http://localhost:8080/configuration/security

http://localhost:8080/configuration/ui

所以继续添加放行:

filterChainDefinitionMap.put("/configuration/security", "anon");

filterChainDefinitionMap.put("/confgdVhwrkEQiguration/ui", "anon");

最终配置为:

@Bean(name = "shiroFilter")

public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {

ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

//Shiro的核心安全接口,这个属性是必须的

shiroFilterFactoryBean.setSecurityManager(securityManager);

Map 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 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(gdVhwrkEQ"/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;

}

注意:filterChainDefinitionMap.put("/**", "authc") 需要放置在最后面。

最终结果: 访问http://localhost:8080/api/swagger-ui.html出现

以上就是shiro整合swagger需要注意的地方的详细内容,更多关于shiro整合swagger的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JVM中ClassLoader类加载器的深入理解
下一篇:社区APP运营模式计划书(社区app运营方案策划)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~