增加白名单域名,优化开放文档,优化展示

This commit is contained in:
暮光:城中城
2019-01-30 22:21:52 +08:00
committed by zhanghongli
parent c8ac59e59a
commit 496bb0d106
13 changed files with 156 additions and 93 deletions

View File

@@ -1,19 +1,20 @@
package com.zyplayer.doc.manage.framework.config;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zyplayer.doc.manage.repository.manage.entity.ZyplayerStorage;
import com.zyplayer.doc.manage.service.manage.ZyplayerStorageService;
import com.zyplayer.doc.swagger.framework.service.MgStorage;
import com.zyplayer.doc.swagger.framework.service.MgStorageService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 申明为@Service之后网页上才能使用存储能力同时需要在@EnableSwagger2的地方添加@EnableSwaggerMgUi注解
@@ -21,14 +22,16 @@ import com.zyplayer.doc.swagger.framework.service.MgStorageService;
* 开放存储能力的好处:<br/>
* 所有网页的配置、调试值都可以存储到服务器的数据库中,便于团队所有人的调试,一人配置,所有人受益<br/>
* 如果不开启的话数据是存放在浏览器的localStorage中每个人、每个浏览器都得配置一次才能使用<br/>
*
*
* @author 暮光:城中城
* @since 2018年8月19日
*/
@Service
public class MgStorageServiceImpl implements MgStorageService {
@Autowired
@Value("${zyplayer.doc.swagger.proxy-request.white-domain}")
private String proxyRequestWhiteDomain;
@Resource
ZyplayerStorageService zyplayerStorageService;
/**
@@ -54,10 +57,7 @@ public class MgStorageServiceImpl implements MgStorageService {
if (storageList == null || storageList.isEmpty()) {
return Collections.emptyList();
}
List<MgStorage> resultList = storageList.stream().map(val -> {
return new MgStorage(val.getDocKey(), val.getDocValue());
}).collect(Collectors.toList());
return resultList;
return storageList.stream().map(val -> new MgStorage(val.getDocKey(), val.getDocValue())).collect(Collectors.toList());
}
/**
@@ -87,5 +87,13 @@ public class MgStorageServiceImpl implements MgStorageService {
queryWrapper.eq("doc_key", key);
zyplayerStorageService.remove(queryWrapper);
}
@Override
public List<String> getProxyRequestWhiteDomain() {
if (StringUtils.isBlank(proxyRequestWhiteDomain)) {
return Collections.emptyList();
}
return Arrays.asList(proxyRequestWhiteDomain.split(";"));
}
}

View File

@@ -39,41 +39,52 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
*/
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/static/lib/**", "/css/**", "/js/**", "/img/**");
web.ignoring().antMatchers();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
String loginPage = "/static/manage/login.html";
// 无需登录即可访问的接口
String[] permitAllAntPatterns = {
// 登录接口
"/login/**",
// 开放接口的静态文件和接口
"/open-doc.html", "/webjars/open-doc/**", "/swagger-mg-ui/open-doc/**",
// http代理请求接口有白名单限制也不怕随便请求到内网资源了
"/swagger-mg-ui/http/**",
// 静态资源
"/webjars/zui/**", "/webjars/vue/**", "/static/lib/**"
};
// 文档页面需要具有文档权限
String[] docAntPatterns = {
"/document.html", "/doc-db.html", "/doc.html", "/swagger-ui.html",
"/swagger-mg-ui/document/**", "/swagger-mg-ui/storage/**", "/swagger-resources/**"
};
http.authorizeRequests()
.antMatchers(
"/login/**", "/open-doc.html",
"/webjars/open-doc/**", "/swagger-mg-ui/open-doc/**",
"/webjars/zui/**", "/webjars/vue/**"
).permitAll()//为了测试其他功能,设置“ /** ”允许所有请求
.antMatchers("/document.html", "/doc.html").hasAuthority("DOC_ALL")
// 其他地址的访问均需登录
.anyRequest().authenticated().and()
// 添加验证码验证
.addFilterAt(myUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(loginPage))
.and().addFilterAt(rememberMeAuthenticationFilter(), RememberMeAuthenticationFilter.class)
// 指定登录页面的请求路径
.formLogin().loginPage(loginPage)
// 登陆处理路径
.loginProcessingUrl("/login").permitAll()
// 退出请求的默认路径为logout
.and().logout().deleteCookies("remember-me")
.logoutUrl("/logout").logoutSuccessUrl(loginPage)
.permitAll()
// 开启rememberMe设置一个私钥专供testall项目使用注意与下面TokenBasedRememberMeServices的key保持一致
// .rememberMe().key("testallKey").and()
// 关闭csrf
.and().csrf().disable()
// X-Frame-Options: SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示
.headers().frameOptions().sameOrigin();
.antMatchers(permitAllAntPatterns).permitAll()
.antMatchers(docAntPatterns).hasAuthority("DOC_ALL")
// 其他地址的访问均需登录
.anyRequest().authenticated().and()
// 添加验证码验证
.addFilterAt(myUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(loginPage))
.and().addFilterAt(rememberMeAuthenticationFilter(), RememberMeAuthenticationFilter.class)
// 指定登录页面的请求路径
.formLogin().loginPage(loginPage)
// 登陆处理路径
.loginProcessingUrl("/login").permitAll()
// 退出请求的默认路径为logout
.and().logout().deleteCookies("remember-me")
.logoutUrl("/logout").logoutSuccessUrl(loginPage)
.permitAll()
// 开启rememberMe设置一个私钥专供testall项目使用注意与下面TokenBasedRememberMeServices的key保持一致
// .rememberMe().key("testallKey").and()
// 关闭csrf
.and().csrf().disable()
// X-Frame-Options: SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示
.headers().frameOptions().sameOrigin();
}
@Override