JHipster 8.1.0生产环境中PrimeNG图标不显示问题求助
解决方案
原因分析
生产环境下PrimeIcons字体文件返回401未授权,是因为JHipster 8的默认Spring Security配置拦截了根路径下的字体资源请求,而开发环境中资源未被拦截,所以显示正常。
方案1:修改Spring Security配置放行字体资源
找到项目中的SecurityConfiguration.java(路径通常为src/main/java/[你的包名]/config/SecurityConfiguration.java),在configure(HttpSecurity http)方法的授权规则中,添加对字体文件的匿名访问权限:
@Override protected void configure(HttpSecurity http) throws Exception { http // 保留原有配置... .authorizeHttpRequests(auth -> auth // 其他已有的授权规则 .requestMatchers("/*.woff2", "/*.woff", "/*.ttf", "/primeicons.*").permitAll() .anyRequest().authenticated() ); }
这段代码会允许所有字体格式文件(woff2、woff、ttf)以及以primeicons开头的资源无需认证即可访问。
方案2:调整Angular资源打包配置
如果不想修改Security配置,可以让Angular将PrimeIcons字体打包到指定目录,并确保路径被Spring Security允许:
- 打开
angular.json,在projects -> [你的项目名] -> architect -> build -> options -> assets数组中添加:
{ "glob": "**/*", "input": "node_modules/primeicons/fonts", "output": "fonts/" }
- 确保
vendor.scss中的PrimeIcons导入路径正确:
@import 'primeicons/primeicons.css';
此时字体文件会被打包到fonts/目录下,JHipster默认允许/fonts/**路径的匿名访问,不会触发401错误。
验证
重新构建生产JAR:
./gradlew -Pprod clean bootJar
启动后再次访问首页,PrimeIcons应该能正常显示,浏览器控制台也不会再出现401错误。
内容的提问来源于stack exchange,提问作者Mike Smith
相关产品推荐
相关产品推荐

