jhipster 刷新 url 导致“无法获取 /user-management”
Posted
技术标签:
【中文标题】jhipster 刷新 url 导致“无法获取 /user-management”【英文标题】:jhipster refresh url cause "Cannot GET /user-management" 【发布时间】:2018-07-12 00:47:50 【问题描述】:我成功创建了一个jhipster应用,然后用admin/admin登录,点击user-management,一切正常,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, elastic search, 中文, mysql, angular 5
【问题讨论】:
您的网址看起来很奇怪,因为它不包含#
我设置了useHash: false,因为我想同时支持www.xxx.com和www.xxx.com/admin,让用户输入#好像很奇怪。
【参考方案1】:
如果您设置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;
【讨论】:
谢谢@Marziou,我会试试这个过滤器。只是困惑,当我在 angular.io (useHash: false) 中尝试官方英雄教程时,刷新 url 看起来没问题,我使用 fiddler 监控响应是“HTTP/1.1 304 Not Modified”。 angular.io 上的英雄教程不使用任何服务器 API,数据不是从服务器获取的,而是硬编码在 Angular 服务中的,这就是为什么不需要区分客户端和服务器路由的原因。服务器只提供客户端使用的静态资产。以上是关于jhipster 刷新 url 导致“无法获取 /user-management”的主要内容,如果未能解决你的问题,请参考以下文章
markdown Spring / Eureka / Jhipster-Registry:获取微服务URL