当前位置: 首页 > 知识库问答 >
问题:

Angular 4 Siteminder HTTP标头问题

陆翰藻
2023-03-14

几个星期以来,我一直在努力将Siteminder身份验证与我的nodejs/角4 Web应用程序“集成”。

在服务器端(节点),我有:

app.get('*', function(req, res) {
  //read Siteminder headers
  if (authenticated) {
    res.sendFile(path.join(__dirname, 'dist/index.html'));
  }else{
    res.sendFile(path.join(__dirname, 'dist/accessDenied.html'));
  }          
}

Angular路由器处理其余的。

这适用于初始权限改造(检索数据的api和服务在不同的机器上,这只是一个前端/客户端应用程序)。

然而,现在用户想要角色,比如编辑/视图,我需要找到一种方法将这些角色从Siteminder标头传递给角前端来处理权限。我玩过拦截器,但运气不好,似乎只能处理从角应用程序内部创建的请求。我还尝试了一些关于Siteminder/node主题中提出的相关问题的建议 /angular但仍然没有运气。

我对节点/角度很陌生,谢谢你的耐心和帮助。

共有1个答案

丁志勇
2023-03-14

最后我自己找到了答案,在下面张贴了详细信息,以防有人感兴趣。决定使用Angular universal express引擎,如下示例所示。

本质上,它允许Angular在服务器端运行,在服务器端可以访问请求头,然后可以将它们注入到客户端使用。

在我的main.server.ts:

app.engine('html',  (_, options, callback) => {
    let engine = ngExpressEngine({
        bootstrap: ServerAppModule,
        providers: [ { provide: 'headers', useFactory: () => options.req.headers } ]
    });

    engine(_, options, callback)
});

app.set('view engine', 'html');
app.set('views', 'dist');

app.use('/', express.static('dist', {index: false}));

ROUTES.forEach(route => {
  app.get(route, (req, res) => {

    console.log('Yaaay Siteminder headers:');
    console.dir(req.headers);

    res.render('index', {
      req: req,
      res: res
    });
  });
});

然后在我的应用程序中。组成部分ts:

export class AppComponent implements OnInit {

     constructor(private cache: TransferState, private injector: Injector, @Inject(PLATFORM_ID) private platformId: Object) {}

    ngOnInit() {
        if (isPlatformServer(this.platformId)) 
       {                
          this.cache.set('user_role', this.injector.get('headers').sm_role);                
        }
    }  

}

之后,我可以在我的任何组件中注入私有缓存:TransferState,并且可以在任何地方使用头,以进行微调访问。

等等瞧。

 类似资料:
  • 如何在JAX-RS中实现WriterInterceptor接口时访问请求头? 完整的代码如下:

  • 问题内容: 我遇到这个错误。而且我不知道如何处理。 无法修改标头信息-已发送的标头(输出从/home/ben213/public_html/wp- includes/pluggable.php上的/home/ben213/public_html/wp- content/themes/Bendaggers/functions.php:9开始) 934行 我的Functions.php文件第9行是:

  • 我正在与Django合作一个项目,该项目通过React前端上的Django Rest框架通过API提供数据。可浏览的API工作正常,但是,react前端在控制台中给出了一个错误。 我已成功安装django cors标头。 CORS策略阻止从http://127.0.0.1:8000/products/http://localhost:3000获取数据:请求的资源上不存在访问控制允许来源标头。如果不

  • 我们什么时候应该在HttpRequest estMessage对象中使用标头而不是HttpClient中的标头?? 我们需要添加授权(总是在变化)和一些自定义标头(总是在变化) 问题 > 首选哪种方法 我是否应该向HttpClient添加公共头(所有请求都相同),并向HttpRequestMessage对象添加基于请求的头??

  • 如何解决以下错误; 加载资源失败:服务器响应状态为500(内部服务器错误)cdn。安普项目。org/v0。js:68响应必须包含AMP访问控制允许源代码源标题Yd@cdn。安普项目。org/v0。js:68 cdn。安普项目。org/v0。js:68表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头​​​ 报道 遵循CORS上AMP G

  • 我正在开发一个带有jhipster V4.5.6的Spring启动应用程序。但无法配置 CORS。 下面是我的application-dev.yml文件: WebConfigurer.java如下: 和安全配置。java文件如下所示: 现在,我可以使用 GET 请求。但是当我使用POST时,如下所示: 我得到以下错误: XMLHttpRequest 无法加载 http://localhost:80