angular - 身份验证后出现 404 错误(Springboot + Angular + Okta)
问题描述
我有一个使用 OKTA OIDC 进行身份验证的 Springboot+Angular 应用程序,该应用程序在我的本地主机上运行良好。对于测试服务器,它通过 Apache。我还没有配置 Apache 设置,也不知道它是如何完成的。我的本地主机上的任何请求,例如 http://localhost:4200/home 都会被转换为测试服务器上的https://testserver.com/app/appname/home 。我的 app-routing.module.ts 是
const routes: Routes = [
{ path: 'home', canActivate: [OktaAuthGuard], component: HomeComponent },
{ path: 'user/:id', component: UserComponent },
{ path: 'callback', component: OktaCallbackComponent },
{ path: '**', redirectTo: 'home', pathMatch: 'full'},
];
环境.ts
export const environment = {
production: false,
appUrl: 'http://localhost:8080/',
issuer: 'https://dev-XXXXXXXX.okta.com/oauth2/default',
clientId: 'XXXXXXXXXXXXXXX',
redirecturi: '/callback'
};
环境.test.ts
export const environment = {
production: false,
appUrl: 'https://testserver.com/services/appname/',
issuer: 'https://dev-XXXXXXXX.okta.com/oauth2/default',
clientId: 'XXXXXXXXXXXXXXX',
redirecturi: '/app/appname/callback'
};
我在 OKTA 控制台中提到了两个登录重定向 URI,它们与本地和测试服务器匹配为
Sign-in redirect URIs: https://testserver.com/app/appname/callback
http://localhost:4200/callback
后端和前端都是独立构建和部署的。当我调用https://testserver.com/app/appname/#时,页面被重定向到 OKTA 登录页面。登录成功并打印 OKTA 系统日志
OAuth2 authorization code request success
但随后返回 404。
我在互联网上看到过用户发布的其他类似问题,但似乎没有一个解决方案对我有用。
我添加了 ReroutingConfig.java 类,如下所示:
@Configuration
public class ReroutingConfig implements WebMvcConfigurer {
private static final Logger logger = LoggerFactory.getLogger(ReroutingConfig.class);
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
System.out.println("ReroutingConfig");
logger.info("ReroutingConfig");
registry.addResourceHandler("/callback").addResourceLocations("/", "classpath:/static/index.html");
try {
registry.addResourceHandler("/callback")
.addResourceLocations("/", "classpath:/static/")
.resourceChain(true)
.addResolver(new PathResourceResolver() {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
logger.info("ReroutingConfig getResource");
Resource requestedResource = location.createRelative(resourcePath);
System.out.println("requestedResource: " + requestedResource.toString());
if (requestedResource.exists() && requestedResource.isReadable()) {
return requestedResource;
} else {
return new ClassPathResource("/static/index.html");
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是,它没有帮助。请提供任何可以提供的建议。谢谢!
解决方案
推荐阅读
- python - 遍历行并使用 range() 填充它们
- azure - 项目文件在部署作业 azure dev ops 管道中不可用
- c# - 从 memoryStream 发送带有附件的 MailKit 电子邮件
- java - 解析数据时抛出异常
- python - 只解析表的一部分
- java - MySQL 数据库用户权限
- pyspark - 如何计算列表列中字符串的出现次数?
- java - 为改造 2 解析 json 时出错,预期为开始数组,但为开始对象
- lightgbm - 在 Jupyter 的 LightGBM 中没有打印训练日志
- php - 从 PHP 网站 node.js 多人游戏连接。如何跟踪用户?