Получение заголовков запроса в angularjs

В Java мы можем получить заголовок http-запроса из HttpServletRequest.

Enumeration headerNames = request.getHeaderNames(); // request is HttpServletRequest

Для нашего приложения мы пытаемся интегрировать SiteMinder с angularjs. Чтобы получить атрибуты пользователя после успешного входа в систему, нам нужно извлечь данные из заголовка запроса. Мы пытаемся создать URL-адрес, который будет целевым, и при успешной аутентификации SiteMinder перенаправит пользователя на этот URL-адрес. Например: URL-адрес будет таким: http://example.com/appContextRoot/testSM (где testSM — это состояние angularjs)

$stateProvider.state('testSM', {
            parent: '...',
            url: '/testSM',
            data: {
                authorities: []
            },
            views: {                 
                'content@': {
                    templateUrl: '',
                    controller: 'TestSMController',
                    controllerAs: 'vm'
                } 
            },

Есть ли способ получить атрибуты из заголовка запроса, как это делается в Java, в angularjs после того, как SiteMinder перенаправит пользователя на этот URL-адрес?


person Aritra Roy    schedule 25.06.2020    source источник


Ответы (1)


Нет. Angular — это Javascript — он работает в браузере. Заголовки запросов вводятся между веб-агентом SiteMinder и серверным приложением. Они не отправляются в браузер. Что вам нужно сделать, так это заставить ваше серверное приложение (например, веб-службы REST) ​​выставлять атрибуты, чтобы они могли быть запрошены браузером. Однако делайте это с особой осторожностью — многие заголовки содержат конфиденциальную информацию о личных данных или инфраструктуре и не предназначены для просмотра на стороне браузера. Если вы придерживаетесь простых значений, таких как имя пользователя, адрес электронной почты, имя и фамилия и т. д., то все должно быть в порядке.

person Richard Sand    schedule 29.06.2020
comment
Спасибо, Ричард, за ваш вклад! Мы также думали об этом подходе, но мы сомневаемся, как гарантировать, что процесс входа в систему не прервется. Поскольку, как только angular отправляет данные в siteminder, а siteminder отправляет результат проверки в back en rest API, как мы можем вернуть управление обратно в angular? Не могли бы вы уточнить - выставить атрибуты, чтобы они могли быть запрошены браузером - person Aritra Roy; 01.07.2020
comment
То, что вы действительно ищете, — это способ инкапсулировать возможности SiteMinder (вход в систему, единый вход, управление сеансом, контроль доступа и т. д.) в вашу модель REST. SiteMinder и аналогичные продукты были созданы буквально более двух десятилетий назад, задолго до того, как приложения Javascript и signle-page превратились в то, чем они являются сегодня. Простой пример: вы, вероятно, не хотите, чтобы пользователь перенаправлялся на другой URL-адрес для входа в систему, потому что тогда ваше приложение теряет контроль над взаимодействием. Что я сделал, так это создал набор служб REST, которые выполняют вход в систему, проверку сеанса, запросы доступа и т. Д., Которые можно вызывать из Javascript. - person Richard Sand; 01.07.2020
comment
отображать атрибуты — скажем, у вас есть простой JSP, работающий на вашем сервере, который находится за веб-агентом SiteMinder. ‹%= {логин: + request.getHeader(SM_USER) + ; }%› будет простой JSP для печати имени входа из SiteMinder в качестве ответа JSon. Пока ваш javascript отправляет файл cookie SiteMinder в запросе, вы сможете получить имя пользователя для входа (остерегайтесь ограничений CORS и файлов cookie HttpOnly). Рискуя саморекламой, я создал продукт, который предоставляет 30 или около того различных микросервисов вокруг SiteMinder, idfconnect.com/products/sso-rest - person Richard Sand; 01.07.2020