#java #single-sign-on #servlet-filters #glassfish-4 #waffle
#java #единый вход #servlet-фильтры #glassfish-4 #waffle
Вопрос:
Я пытаюсь реализовать единый вход в своем приложении (используя пример Waffle), где я продолжал следить за jars в библиотеке сервера приложений :
caffeine-2.8.4.jar
jcl-over-slf4j-2.0.0-alpha1.jar
jna-platform-5.5.0.jar
logback-classic-1.3.0-alpha5.jar
logback-core-1.3.0-alpha5.jar
slf4j-api-2.0.0-alpha1.jar
waffle-tomcat7-2.3.0.jar
waffle-jna-2.3.0.jar
Я обновил свой web.xml чтобы иметь соответствующий фильтр безопасности :
<!-- SSO -->
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Следующий шаг — я запускаю приложение как службу с именем пользователя моего домена. До сих пор все хорошо.
Теперь, когда я нажимаю URL-адрес приложения, он выдает всплывающее окно базовой аутентификации. Когда я проверил журналы, все выглядит хорошо :
[2020-12-10T15:48:38.897 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615318897] [levelValue: 800] [[
15:48:38.897 [http-listener-1(4)] DEBUG waffle.servlet.NegotiateSecurityFilter - GET /iFM/desktopNotification_serviceWorker.js, contentlength: -1]]
[2020-12-10T15:48:38.897 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615318897] [levelValue: 800] [[
15:48:38.897 [http-listener-1(4)] DEBUG waffle.servlet.spi.NegotiateSecurityFilterProvider - security package: Negotiate, connection id: 0:0:0:0:0:0:0:1:60170]]
[2020-12-10T15:48:38.897 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615318897] [levelValue: 800] [[
15:48:38.897 [http-listener-1(4)] DEBUG waffle.servlet.spi.NegotiateSecurityFilterProvider - token buffer: 121 byte(s)]]
[2020-12-10T15:48:38.908 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615318908] [levelValue: 800] [[
15:48:38.908 [http-listener-1(4)] DEBUG waffle.servlet.spi.NegotiateSecurityFilterProvider - continue token: oRswGaADCgEAoxIEEAEAAADBU/5OcoZ2owAAAAA=]]
[2020-12-10T15:48:38.909 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615318909] [levelValue: 800] [[
15:48:38.908 [http-listener-1(4)] DEBUG waffle.servlet.spi.NegotiateSecurityFilterProvider - continue required: false]]
[2020-12-10T15:48:39.045 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615319045] [levelValue: 800] [[
15:48:39.045 [http-listener-1(4)] DEBUG waffle.servlet.NegotiateSecurityFilter - logged in user: INTWareyAn (S-1-5-21-746137067-764733703-725345543-1003051)]]
[2020-12-10T15:48:40.843 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615320843] [levelValue: 800] [[
15:48:40.843 [http-listener-1(4)] DEBUG waffle.servlet.NegotiateSecurityFilter - roles: (**I have removed this info **)
[2020-12-10T15:48:40.843 0000] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=33 _ThreadName=Thread-9] [timeMillis: 1607615320843] [levelValue: 800] [[
15:48:40.843 [http-listener-1(4)] INFO waffle.servlet.NegotiateSecurityFilter - successfully logged in user: INTWareyAn]]
Итак, глядя на журналы , похоже, что Waffle аутентифицировала меня , но Glassfish все еще почему-то не доверяет этому (выдавая мне всплывающее окно), есть идеи, что происходит не так? Любая помощь будет высоко оценена.
К вашему сведению: мое приложение использует LDAPRealm для аутентификации.
Ответ №1:
Хорошо, я смог решить это сам, и, наконец, это сработало на Glassfish4!! Поскольку я использовал фильтр сервлетов, у web.xml
меня на самом деле не должно быть следующих вещей (поскольку ранее это был логин на основе формы) :
<security-constraint>
<display-name>AppSecurity Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area (Whole Application)</web-resource-name>
<url-pattern>/mainUrl/*</url-pattern>
<url-pattern>/url2/*</url-pattern>
<url-pattern>/url3/*</url-pattern>
<url-pattern>/url4/*</url-pattern>
<url-pattern>/url5/*</url-pattern>
</web-resource-collection>
<!-- User must be in role to login. -->
<auth-constraint>
<role-name>SomeRoleName</role-name>
</auth-constraint>
</security-constraint>
После его удаления он начал работать.