SpringBootプロジェクトブロック構成の前後端分離
19554 ワード
前言
最近、SpringBootフレームワークに基づく前後端分離プロジェクトを「構築」する必要があります.その中でブロックを配置する必要があります.多角的に資料を調べて、最終的に以下の内容をまとめます.
ブロッキング構成
以下はブロックの基本構成である.によってブロックされた要求は、まずtoken情報を検証し、ここでtoken情報はredisに格納される. ブロッキングは、ドメイン間要求(OPTIONS要求の処理) をサポートする.ブロッカーの返却情報は、自分のニーズに合わせて をカスタマイズすることが望ましい. addPathPatterns:すべてのリクエストをブロック excludePathPatterns:ブロックしない要求を設定 addResourceHandler:静的リソースタイプ addResourceLocations:静的リソースが存在するディレクトリ(http://localhost:8080/xxx.html)
リファレンスリンク httpのプロトコルのドメイン間corsおよびoptions要求のいくつかの理解 本文は作者のために问题を解决するために整理の1つの小さい结び目を探して、不足あるいは安全な隠れた危険性があるかもしれなくて、とてもみんなのコメントの伝言を期待して、一方で自分の1つの学习の整理の成果を検査して、一方でやはりみんなと学びたいと思って、みんなの批判の指摘を歓迎して、ありがとうございます!!
最近、SpringBootフレームワークに基づく前後端分離プロジェクトを「構築」する必要があります.その中でブロックを配置する必要があります.多角的に資料を調べて、最終的に以下の内容をまとめます.
ブロッキング構成
以下はブロックの基本構成である.
/**
* @program: share
* @description:
* @author: Mr.Jkx
* @create: 2020-03-11 17:22
*/
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Resource
private RedisService redisService;
/**
* ,
* :true ;false ,
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// OPTIONS ( ), “ >>>http cors options ”
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");
response.setHeader("Access-Control-Max-Age", "86400");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Content-Type", "text/html;charset=utf-8");
if (request.getMethod().equals("OPTIONS")) {
response.setStatus(HttpServletResponse.SC_OK);
return false;
}
// token
String token = request.getHeader("token");
if (StringUtils.isNotBlank(token)) {
// redis token
if (null != redisService.get(token)) {
return true;
} else {
returnJson(response, " ");
}
} else {
returnJson(response, " ");
}
return false;
}
/**
* , (controller) ,
* modelAndView
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/**
* , ,
* ,
* , try-catch-finally finally,
*
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
/**
* @Description:
* @Author: Mr.Jkx
* @date: 2020/3/12 13:46
*/
private void returnJson(HttpServletResponse response, String msgData) {
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
Msg msg = Msg.fail().add("info", msgData);
String res = JsonUtil.toJsonString(msg);
writer.print(res);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
writer.close();
}
}
}
}
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Autowired
private LoginInterceptor loginInterceptor;
@Autowired
private ResourcesConfig resourcesConfig;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//
// addPathPatterns ,/**
// excludePathPatterns
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
.excludePathPatterns(
"/**.html",
"/**/*.js",
"/**/*.jpg",
"/**/*.png",
"/**/*.gif",
"/**/*.css",
"/**/*.ts",
"/user/userLogin",
"/personage/addPersonage",
"/file/uploadFile",
"/file/uploadFileOfBatch",
"/file/download",
"/file/uploadRichTextFile");
super.addInterceptors(registry);
}
/**
* @Description:
* @Author: Mr.Jkx
* @date: 2020/3/18 16:45
* file:
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(
"/**.html",
"/**/*.js",
"/**/*.jpg",
"/**/*.png",
"/**/*.gif",
"/**/*.css",
"/**/*.ts")
.addResourceLocations("file:" + resourcesConfig.getWebpagepath(),
"file:" + resourcesConfig.getReadimagepath());
}
}
リファレンスリンク