Отключить гостевых пользователей в Guvnor 5.x?
У меня проблемы с получением аутентификации для работы на Guvnor 5.4.0.Final на tomcat-7.0.42. Я заменил безопасность шва-3.1.0.Final на безопасность шва-3.2.0.Final.
Вот фрагменты XML, для которых я настроил базовый аутентификатор:
дяденька / WEB-INF / beans.xml
<security:IdentityImpl>
<s:modifies/>
<security:authenticatorName>jaasAuthenticator</security:authenticatorName>
</security:IdentityImpl>
<security:jaas.JaasAuthenticator>
<s:modifies/>
<security:jaasConfigName>drools-guvnor</security:jaasConfigName>
</security:jaas.JaasAuthenticator>
jaas.config
drools-guvnor {
com.ndipiazza.JaasGuvnor required debug=true;
};
Смотрите этот ZIP-файл для входа в систему Guvnor JAAS: https://community.jboss.org/servlet/JiveServlet/download/831268-105978/guvnor-jaas.zip
Я не включил разрешения на основе ролей. У меня все в порядке с теми же ролями, если нет гостевых пользователей.
Но когда я использую эту конфигурацию, а затем перехожу к Guvnor, я вижу, что я уже вошел в систему. Welcome: guest [Выйти]
Я хочу, чтобы он зашел в форму входа в систему. Как я могу настроить это? Я что-то пропустил?
Когда я включаю разрешения на основе ролей с этим:
<guvnorSecurity:RoleBasedPermissionResolver>
<s:modifies/>
<guvnorSecurity:enableRoleBasedAuthorization>true</guvnorSecurity:enableRoleBasedAuthorization>
</guvnorSecurity:RoleBasedPermissionResolver>
Затем я получаю это сообщение об ошибке (401 У этого пользователя нет настроек разрешений.). И трассировка стека ниже показывает:
INFO 03-08 12:53:23,517 (LoggingHelper.java:info:56)
Service method 'public
abstract org.drools.guvnor.client.rpc.UserSecurityContext org.drools.guvnor.clie
nt.rpc.SecurityService.getCurrentUser()' threw an unexpected exception: org.jbos
s.seam.security.AuthorizationException: This user has no permissions setup.
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstr
act org.drools.guvnor.client.rpc.UserSecurityContext org.drools.guvnor.client.rp
c.SecurityService.getCurrentUser()' threw an unexpected exception: org.jboss.sea
m.security.AuthorizationException: This user has no permissions setup.
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:
385)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:5
88)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(Remot
eServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(Remot
eServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(Ab
stractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:210)
at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(Catc
hExceptionFilter.java:65)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:210)
at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(Serv
letEventBridgeFilter.java:74)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp
11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin
t.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.jboss.seam.security.AuthorizationException: This user has no perm
issions setup.
at org.drools.guvnor.server.security.SecurityServiceImpl.getUserCapabili
ties(SecurityServiceImpl.java:128)
at org.drools.guvnor.server.security.SecurityServiceImpl.getCurrentUser(
SecurityServiceImpl.java:101)
at org.drools.guvnor.server.security.SecurityServiceImpl$Proxy$_$$_WeldC
lientProxy.getCurrentUser(SecurityServiceImpl$Proxy$_$$_WeldClientProxy.java)
at org.drools.guvnor.server.SecurityServiceServlet.getCurrentUser(Securi
tyServiceServlet.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:5
69)
... 27 more
Идя с отладчиком, я вижу, что идентификатор пользователя "гость".
Какой шаг мне не хватает, чтобы я мог видеть экран входа?
Этот билет также открыт в сообществе JBoss: https://community.jboss.org/message/831268
1 ответ
Это решение не было протестировано с Tomcat, но с JBoss 7.1.1. Не уверен, если есть большая разница, но в любом случае здесь это идет:
Прежде всего, вам нужно создать новый домен безопасности в standalone.xml:
<security-domain name="your-security-domain-name" cache-type="default">
<authentication>
<login-module code="LdapExtended" flag="required">
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="your LDAP url/>
<module-option name="baseCtxDN" value="ou=your_OU,dc=yourDC,dc=com"/>
<module-option name="baseFilter" value="(uid={0})"/>
<module-option name="rolesCtxDN" value="ou=your_Roles_OU, dc=yourDC,dc=com"/>
<module-option name="roleFilter" value="(member={1})"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="throwValidateError" value="true"/>
<module-option name="searchScope" value="ONELEVEL_SCOPE"/>
</login-module>
</authentication>
</security-domain>
Затем настройте файл guvnor.war beans.xml для использования JAAS:
(...)
<security:IdentityImpl> <s:modifies/>
<!-- JAAS based authentication -->
<security:authenticatorName>jaasAuthenticator</security:authenticatorName>
</security:IdentityImpl>
<security:jaas.JaasAuthenticator>
<s:modifies/>
<security:jaasConfigName>your-security-domain-name</security:jaasConfigName>
</security:jaas.JaasAuthenticator>
<!-- SECURITY AUTHORIZATION CONFIGURATION --> <!-- This is used to enable or disable role-based authorization. By default it is disabled. -->
<guvnorSecurity:RoleBasedPermissionResolver>
<s:modifies/>
<guvnorSecurity:enableRoleBasedAuthorization>false</guvnorSecurity:enableRoleBasedAuthorization>
</guvnorSecurity:RoleBasedPermissionResolver>
<weld:scan>
<!-- Disable the seam-security by drools rules
<weld:exclude name="org.jboss.seam.security.permission.RuleBasedPermissionResolver"/>-->
<!-- TODO remove me when GUVNOR-1196 is fixed -->
<weld:exclude name="org.drools.guvnor.gwtutil.**"/>
<weld:exclude name="org.drools.guvnor.client.**"/>
</weld:scan>
</beans>
Перед установкой этой строки здесь, чтобы истина
<guvnorSecurity:enableRoleBasedAuthorization>false</guvnorSecurity:enableRoleBasedAuthorization>
Вы должны войти в систему сначала без ролей, чтобы вы могли сопоставить пользователя с его разрешениями. Предоставьте права администратора хотя бы одному пользователю, иначе вы не сможете войти.
Кроме того, не забудьте обновить обе фляги безопасности шва под WEB-INF/lib с версии 3.1 до 3.2. Это очень важно, иначе логин не будет работать.
Это решение получило мой логин для аутентификации пользователей с моего сервера LDAP на Guvnor без каких-либо взломов. Если у вас есть еще проблемы, дайте мне знать.
Рафаэль