亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

springboot整合shiro后Swagger報404

//?SwaggerConfig?
package?com.kaituo.common.swagger;

import?com.google.common.base.Predicates;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.ComponentScan;
import?org.springframework.context.annotation.Configuration;
import?org.springframework.web.servlet.config.annotation.EnableWebMvc;
import?org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import?org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import?org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import?springfox.documentation.builders.ApiInfoBuilder;
import?springfox.documentation.builders.PathSelectors;
import?springfox.documentation.builders.RequestHandlerSelectors;
import?springfox.documentation.service.ApiInfo;
import?springfox.documentation.service.Contact;
import?springfox.documentation.spi.DocumentationType;
import?springfox.documentation.spring.web.plugins.Docket;
import?springfox.documentation.swagger2.annotations.EnableSwagger2;


/**
?*?swagger?接口文檔工具
?*?@Author:?RenShuai
?*?@Classname?SwaggerConfig
?*?@Package?com.kaituo.common.swagger
?*?@Date?2019/8/28?13:48
?*?@Version?V1.0
?*?@address?:?http://localhost:7100/swagger-ui.html
?*/
@Configuration
@EnableWebMvc
@EnableSwagger2
@ComponentScan(basePackages?=?{?"com.kaituo.common.*"?})
public?class?SwaggerConfig?implements?WebMvcConfigurer?{
????/**
?????*?創建一個Docket對象
?????*?調用select()方法,
?????*?生成ApiSelectorBuilder對象實例,該對象負責定義外漏的API入口
?????*?通過使用RequestHandlerSelectors和PathSelectors來提供Predicate,在此我們使用any()方法,將所有API都通過Swagger進行文檔管理
?????*?@return
?????*/
????@Bean
????public?Docket?createRestApi()?{
????????return?new?Docket(DocumentationType.SWAGGER_2)
????????????????.apiInfo(apiInfo())
????????????????.select()
????????????????.apis(RequestHandlerSelectors.any())
????????????????.paths(Predicates.not(PathSelectors.regex("/error.*")))//錯誤路徑不監控
????????????????.paths(PathSelectors.any())
????????????????.build();
????}

????private?ApiInfo?apiInfo()?{
????????return?new?ApiInfoBuilder()
????????????????//標題
????????????????.title("科研項目接口文檔")
????????????????//簡介
????????????????.description("")
????????????????//服務條款
????????????????.termsOfServiceUrl("")
????????????????//作者個人信息
????????????????.contact(new?Contact("renshuai","","[email protected]"))
????????????????//版本
????????????????.version("1.0")
????????????????.build();
????}

????@Override
????public?void?addResourceHandlers(ResourceHandlerRegistry?registry)?{
//????????registry.addResourceHandler("/**").addResourceLocations("classpath*:/static/");
????????registry.addResourceHandler("swagger-ui.html")
????????????????.addResourceLocations("classpath:/META-INF/resources/");
????????registry.addResourceHandler("/webjars/**")
????????????????.addResourceLocations("classpath:/META-INF/resources/webjars/");
//????????super.addResourceHandlers(registry);
????}
}

shiro的配置

package?com.kaituo.shiro.configs;

import?com.kaituo.pojo.bo.ShiroBO;
import?org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import?org.apache.shiro.mgt.SecurityManager;
import?org.apache.shiro.session.mgt.eis.MemorySessionDAO;
import?org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import?org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import?org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import?org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import?org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;

import?java.util.LinkedHashMap;
import?java.util.Map;

/**
?*?@program:?scaffold
?*?@description:
?*?@author:?由蘇澤華創建
?*?@create:?2019-09-29?14:04
?**/

@Configuration
public?class?ShiroConfig?{
????@Autowired
????ShiroBO?shiroBO;

????@Bean
????@ConditionalOnMissingBean
????public?DefaultAdvisorAutoProxyCreator?defaultAdvisorAutoProxyCreator()?{
????????DefaultAdvisorAutoProxyCreator?app?=?new?DefaultAdvisorAutoProxyCreator();
????????app.setProxyTargetClass(true);
????????return?app;
????}

????@Bean(name?=?"shiroFilter")
????public?ShiroFilterFactoryBean?shiroFilter()?{
????????ShiroFilterFactoryBean?shiroFilterFactoryBean?=?new?ShiroFilterFactoryBean();
????????shiroFilterFactoryBean.setSecurityManager(securityManager());
????????//登錄
//????????shiroFilterFactoryBean.setLoginUrl("/login");
????????//未授權界面,聽說這個有問題。是個坑
//????????shiroFilterFactoryBean.setUnauthorizedUrl("/notRole");
????????Map<String,?String>?filterChainDefinitionMap?=?new?LinkedHashMap<>();
????????//?<!--?authc:所有url都必須認證通過才可以訪問;?anon:所有url都都可以匿名訪問-->
????????filterChainDefinitionMap.put("classpath:/static/**",?"anon");
????????filterChainDefinitionMap.put("/css/**",?"anon");
????????filterChainDefinitionMap.put("/js/**",?"anon");
????????filterChainDefinitionMap.put("/img/**",?"anon");
????????filterChainDefinitionMap.put("/favicon.ico",?"anon");
????????filterChainDefinitionMap.put("/swagger-ui.html",?"anon");
????????filterChainDefinitionMap.put("/swagger/**","anon");
????????filterChainDefinitionMap.put("/webjars/**",?"anon");
????????filterChainDefinitionMap.put("/swagger-resources/**","anon");
????????filterChainDefinitionMap.put("/v2/**","anon");

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

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

????????filterChainDefinitionMap.put("/admin/**",?"authc");
????????filterChainDefinitionMap.put("/user/**",?"authc");
????????//主要這行代碼必須放在所有權限設置的最后,不然會導致所有?url?都被攔截?剩余的都需要認證
//????????filterChainDefinitionMap.put("/**",?"authc");

????????shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
????????return?shiroFilterFactoryBean;

????}

????/**
?????*?創建securityManger對象
?????*
?????*?@param
?????*?@Description:?創建securityManger對象
?????*?@Param:
?????*?@return:?org.apache.shiro.web.mgt.DefaultWebSecurityManager
?????*?@Author:?蘇澤華
?????*?@Date:?2019/1/10
?????*/
????@Bean
????public?SecurityManager?securityManager()?{
????????DefaultWebSecurityManager?securityManager?=?new?DefaultWebSecurityManager();


????????securityManager.setSessionManager(sessionManager());
????????//?TODO:?2019/8/29
//????????securityManager.setCacheManager(redisCacheManager());
????????securityManager.setRealm(realm());
????????return?securityManager;
????}

????@Bean
????public?DefaultWebSessionManager?sessionManager()?{
????????DefaultWebSessionManager?sessionManager?=?new?DefaultWebSessionManager();
????????sessionManager.setSessionDAO(sessionDAO());
????????sessionManager.setDeleteInvalidSessions(true);
????????sessionManager.setGlobalSessionTimeout(shiroBO.getShiroSessionTimeout());
????????sessionManager.setSessionValidationInterval(shiroBO.getShiroSessionValidationInterval());
????????sessionManager.setSessionValidationSchedulerEnabled(true);
????????return?sessionManager;
????}

????@Bean
????public?MemorySessionDAO?sessionDAO()?{
????????MemorySessionDAO?memorySessionDAO?=?new?MemorySessionDAO();
????????return?memorySessionDAO;
????}

????/**
?????*?創建密碼驗證器
?????*
?????*?@param
?????*?@Description:?創建密碼驗證器
?????*?@Param:
?????*?@return:?org.apache.shiro.authc.credential.HashedCredentialsMatcher
?????*?@Author:?蘇澤華
?????*?@Date:?2019/1/10
?????*/
????@Bean
????public?HashedCredentialsMatcher?credentialsMatcher()?{
????????HashedCredentialsMatcher?hashedCredentialsMatcher?=?new?HashedCredentialsMatcher();
????????hashedCredentialsMatcher.setHashAlgorithmName(shiroBO.getHashAlgorithmName());
????????hashedCredentialsMatcher.setHashIterations(shiroBO.getHashIterations());
????????return?hashedCredentialsMatcher;
????}

????/**
?????*?*
?????*?開啟Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP掃描使用Shiro注解的類,并在必要時進行安全邏輯驗證
?????*?*
?????*?配置以下兩個bean(DefaultAdvisorAutoProxyCreator(可選)和AuthorizationAttributeSourceAdvisor)即可實現此功能
?????*?*?@return
?????*/
//????@Bean
//????@DependsOn({"lifecycleBeanPostProcessor"})
//????public?DefaultAdvisorAutoProxyCreator?advisorAutoProxyCreator()?{
//????????DefaultAdvisorAutoProxyCreator?advisorAutoProxyCreator?=?new?DefaultAdvisorAutoProxyCreator();
//????????advisorAutoProxyCreator.setProxyTargetClass(true);
//????????return?advisorAutoProxyCreator;
//????}
????@Bean
????public?AuthorizationAttributeSourceAdvisor?authorizationAttributeSourceAdvisor()?{
????????AuthorizationAttributeSourceAdvisor?authorizationAttributeSourceAdvisor?=?new?AuthorizationAttributeSourceAdvisor();
????????authorizationAttributeSourceAdvisor.setSecurityManager(securityManager());
????????return?authorizationAttributeSourceAdvisor;
????}

????/**
?????*?創建realm
?????*
?????*?@param
?????*?@Description:?創建realm
?????*?@Param:
?????*?@return:?com.company.shiro.realm.TestCustomRealm
?????*?@Author:?蘇澤華
?????*?@Date:?2019/1/10
?????*/
????@Bean
????public?CustomRealm?realm()?{
????????CustomRealm?realm?=?new?CustomRealm();
????????realm.setShiroBO(shiroBO);
????????realm.setCredentialsMatcher(credentialsMatcher());
????????return?realm;
????}


}

錯誤信息

http://img3.sycdn.imooc.com/5d9f10670001c94f11280174.jpg

已經整了兩天了


正在回答

舉報

0/150
提交
取消

springboot整合shiro后Swagger報404

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號