如何在 Jhipster (spring boot + angular) 应用程序上设置上下文路径
How set up a Context Path on a Jhipster (spring boot + angular) application
我生成了一个 Jhipster 项目经典 Spring Auth + Angular 客户端应用程序。
我只需要在 Jhipster 应用程序上设置自定义上下文路径 "gateway"
我刚刚在服务器上设置了文件 "src\main\resources\config\application-dev.yml":
.....
server:
port: 8080
servlet:
context-path: /gateway
...
在 angular 客户端上,我无法理解如何设置它。
在文件"webpack\webpack.common.js"上设置:
....
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: `'${options.env}'`,
BUILD_TIMESTAMP: `'${new Date().getTime()}'`,
// APP_VERSION is passed as an environment variable from the Gradle / Maven build tasks.
VERSION: `'${process.env.hasOwnProperty('APP_VERSION') ? process.env.APP_VERSION : 'DEV'}'`,
DEBUG_INFO_ENABLED: options.env === 'development',
// The root URL for API calls, ending with a '/' - for example: `"https://www.jhipster.tech:8081/myservice/"`.
// If this URL is left empty (""), then it will be relative to the current context.
// If you use an API server, in `prod` mode, you will need to enable CORS
// (see the `jhipster.cors` common JHipster property in the `application-*.yml` configurations)
SERVER_API_URL: `'http://localhost:8080/gateway/'`
}
}),
......
new BaseHrefWebpackPlugin({ baseHref: '/gateway' })
....
但是没有用,登录总是失败。
我还想念其他东西吗?
更新 Gaël Marziou 评论
似乎来自客户端“http://localhost:9000/gateway/" failed to login to the service "http://localhost:8080/gateway/api/authentication”的登录代码为 403,服务器上出现一些 csfr 异常:
已解决[org.springframework.security.web.csrf.MissingCsrfTokenException:无法验证提供的 CSRF 令牌,因为未找到您的会话。]
所以这可能是 spring 引导的安全配置上的一些错误:
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.addFilterBefore(corsFilter, CsrfFilter.class)
.exceptionHandling()
.authenticationEntryPoint(problemSupport)
.accessDeniedHandler(problemSupport)
.and()
.rememberMe()
.rememberMeServices(rememberMeServices)
.rememberMeParameter("remember-me")
.key(jHipsterProperties.getSecurity().getRememberMe().getKey())
.and()
.formLogin()
.loginProcessingUrl("/api/authentication")
.successHandler(ajaxAuthenticationSuccessHandler())
.failureHandler(ajaxAuthenticationFailureHandler())
.permitAll()
.and()
.logout()
.logoutUrl("/api/logout")
.logoutSuccessHandler(ajaxLogoutSuccessHandler())
.permitAll()
.and()
.headers()
.contentSecurityPolicy("default-src 'self'; frame-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://storage.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:")
.and()
.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
.and()
.featurePolicy("geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; speaker 'none'; fullscreen 'self'; payment 'none'")
.and()
.frameOptions()
.deny()
.and()
.authorizeRequests()
.antMatchers("/**/api/authenticate").permitAll()
.antMatchers("/**/api/register").permitAll()
.antMatchers("/**/api/activate").permitAll()
.antMatchers("/**/api/account/reset-password/init").permitAll()
.antMatchers("/**/api/account/reset-password/finish").permitAll()
.antMatchers("/**/api/**").authenticated()
.antMatchers("/**/management/health").permitAll()
.antMatchers("/**/management/info").permitAll()
.antMatchers("/**/management/prometheus").permitAll()
.antMatchers("/**/management/**").hasAuthority(AuthoritiesConstants.ADMIN);
// @formatter:on
}
我找到了以下 5 个地方。
webpack.common.js
new BaseHrefWebpackPlugin({ baseHref: '/gateway/' })
webpack.dev.js
proxy: [{
context: [
'/gateway/api',
'/gateway/services',
...
app.context.ts
export const SERVER_API_URL = process.env.SERVER_API_URL + "/gateway/";
resources\config\application-dev.yml
.....
server:
port: 8080
servlet:
context-path: /gateway
index.html
<base href="/gateway/" />
我生成了一个 Jhipster 项目经典 Spring Auth + Angular 客户端应用程序。
我只需要在 Jhipster 应用程序上设置自定义上下文路径 "gateway"
我刚刚在服务器上设置了文件 "src\main\resources\config\application-dev.yml":
.....
server:
port: 8080
servlet:
context-path: /gateway
...
在 angular 客户端上,我无法理解如何设置它。
在文件"webpack\webpack.common.js"上设置:
....
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: `'${options.env}'`,
BUILD_TIMESTAMP: `'${new Date().getTime()}'`,
// APP_VERSION is passed as an environment variable from the Gradle / Maven build tasks.
VERSION: `'${process.env.hasOwnProperty('APP_VERSION') ? process.env.APP_VERSION : 'DEV'}'`,
DEBUG_INFO_ENABLED: options.env === 'development',
// The root URL for API calls, ending with a '/' - for example: `"https://www.jhipster.tech:8081/myservice/"`.
// If this URL is left empty (""), then it will be relative to the current context.
// If you use an API server, in `prod` mode, you will need to enable CORS
// (see the `jhipster.cors` common JHipster property in the `application-*.yml` configurations)
SERVER_API_URL: `'http://localhost:8080/gateway/'`
}
}),
......
new BaseHrefWebpackPlugin({ baseHref: '/gateway' })
....
但是没有用,登录总是失败。 我还想念其他东西吗?
更新 Gaël Marziou 评论
似乎来自客户端“http://localhost:9000/gateway/" failed to login to the service "http://localhost:8080/gateway/api/authentication”的登录代码为 403,服务器上出现一些 csfr 异常:
已解决[org.springframework.security.web.csrf.MissingCsrfTokenException:无法验证提供的 CSRF 令牌,因为未找到您的会话。]
所以这可能是 spring 引导的安全配置上的一些错误:
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.addFilterBefore(corsFilter, CsrfFilter.class)
.exceptionHandling()
.authenticationEntryPoint(problemSupport)
.accessDeniedHandler(problemSupport)
.and()
.rememberMe()
.rememberMeServices(rememberMeServices)
.rememberMeParameter("remember-me")
.key(jHipsterProperties.getSecurity().getRememberMe().getKey())
.and()
.formLogin()
.loginProcessingUrl("/api/authentication")
.successHandler(ajaxAuthenticationSuccessHandler())
.failureHandler(ajaxAuthenticationFailureHandler())
.permitAll()
.and()
.logout()
.logoutUrl("/api/logout")
.logoutSuccessHandler(ajaxLogoutSuccessHandler())
.permitAll()
.and()
.headers()
.contentSecurityPolicy("default-src 'self'; frame-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://storage.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:")
.and()
.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)
.and()
.featurePolicy("geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; speaker 'none'; fullscreen 'self'; payment 'none'")
.and()
.frameOptions()
.deny()
.and()
.authorizeRequests()
.antMatchers("/**/api/authenticate").permitAll()
.antMatchers("/**/api/register").permitAll()
.antMatchers("/**/api/activate").permitAll()
.antMatchers("/**/api/account/reset-password/init").permitAll()
.antMatchers("/**/api/account/reset-password/finish").permitAll()
.antMatchers("/**/api/**").authenticated()
.antMatchers("/**/management/health").permitAll()
.antMatchers("/**/management/info").permitAll()
.antMatchers("/**/management/prometheus").permitAll()
.antMatchers("/**/management/**").hasAuthority(AuthoritiesConstants.ADMIN);
// @formatter:on
}
我找到了以下 5 个地方。
webpack.common.js
new BaseHrefWebpackPlugin({ baseHref: '/gateway/' })
webpack.dev.js
proxy: [{
context: [
'/gateway/api',
'/gateway/services',
...
app.context.ts
export const SERVER_API_URL = process.env.SERVER_API_URL + "/gateway/";
resources\config\application-dev.yml
.....
server:
port: 8080
servlet:
context-path: /gateway
index.html
<base href="/gateway/" />