jhipster 刷新 url 导致 "Cannot GET /user-management"
jhipster refresh url cause "Cannot GET /user-management"
我成功创建了一个 jhipster 应用程序,然后使用 admin/admin 登录,单击用户管理,一切正常,url 更改为 localhost:9000/user-management。
但是,当我使用 chrome 刷新按钮刷新 url 时,页面中断并显示消息:"Cannot GET /user-management",在按 F12 启动调试器后,它在控制台中显示以下错误消息:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:"default-src 'self'"。启用内联执行需要 'unsafe-inline' 关键字、散列 ('sha256-GKWAMtgBzlCzmucztJIeDl/kD0MKNqAT5HDcFIff2+A=') 或随机数 ('nonce-...')。另请注意 'script-src' 未明确设置,因此 'default-src' 用作备用。
请帮忙,提前致谢。
注:yarn v1.3.2, "@angular/core": "5.2.0", java 1.8, jwt, elasticsearch, 中文, mysql, angular 5
如果您设置 useHash: false
并单击刷新,请求将发送到服务器,因此您会收到与您遇到的确切错误:服务器正在处理但未找到的客户端路由。因此,您必须使用 servlet 过滤器调整服务器端,请参阅 https://github.com/jhipster/generator-jhipster/issues/4794#issuecomment-304097246
中的详细信息
另请注意,这种方法不适用于微服务架构中的网关。
这是您可以调整的此类过滤器的示例,它将对客户端路由的请求转发到“/”,以便它们被 index.html 中的 angular 应用程序解释:
public class AngularRouteFilter extends OncePerRequestFilter {
// add the values you want to redirect for
private static final Pattern PATTERN = Pattern.compile("^/((api|swagger-ui|management|swagger-resources)/|favicon\.ico|v2/api-docs).*");
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException, IOException {
if (isServerRoute(request)) {
filterChain.doFilter(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher("/");
rd.forward(request, response);
}
}
protected static boolean isServerRoute(HttpServletRequest request) {
if (request.getMethod().equals("GET")) {
String uri = request.getRequestURI();
return PATTERN.matcher(uri).matches();
}
return true;
}
}
我成功创建了一个 jhipster 应用程序,然后使用 admin/admin 登录,单击用户管理,一切正常,url 更改为 localhost:9000/user-management。
但是,当我使用 chrome 刷新按钮刷新 url 时,页面中断并显示消息:"Cannot GET /user-management",在按 F12 启动调试器后,它在控制台中显示以下错误消息:
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:"default-src 'self'"。启用内联执行需要 'unsafe-inline' 关键字、散列 ('sha256-GKWAMtgBzlCzmucztJIeDl/kD0MKNqAT5HDcFIff2+A=') 或随机数 ('nonce-...')。另请注意 'script-src' 未明确设置,因此 'default-src' 用作备用。
请帮忙,提前致谢。
注:yarn v1.3.2, "@angular/core": "5.2.0", java 1.8, jwt, elasticsearch, 中文, mysql, angular 5
如果您设置 useHash: false
并单击刷新,请求将发送到服务器,因此您会收到与您遇到的确切错误:服务器正在处理但未找到的客户端路由。因此,您必须使用 servlet 过滤器调整服务器端,请参阅 https://github.com/jhipster/generator-jhipster/issues/4794#issuecomment-304097246
另请注意,这种方法不适用于微服务架构中的网关。
这是您可以调整的此类过滤器的示例,它将对客户端路由的请求转发到“/”,以便它们被 index.html 中的 angular 应用程序解释:
public class AngularRouteFilter extends OncePerRequestFilter {
// add the values you want to redirect for
private static final Pattern PATTERN = Pattern.compile("^/((api|swagger-ui|management|swagger-resources)/|favicon\.ico|v2/api-docs).*");
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException, IOException {
if (isServerRoute(request)) {
filterChain.doFilter(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher("/");
rd.forward(request, response);
}
}
protected static boolean isServerRoute(HttpServletRequest request) {
if (request.getMethod().equals("GET")) {
String uri = request.getRequestURI();
return PATTERN.matcher(uri).matches();
}
return true;
}
}