无法让 jdbcRealm 工作



我正在尝试让jdbcRealm为我的应用程序工作。这就是我目前所拥有的:

在我的web.xml中,我有:

<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbcRealm</realm-name>
<form-login-config>
<form-login-page>/user/login.jsf</form-login-page>
<form-error-page>/user/error.jsf</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Console</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>

在玻璃鱼中,我定义了一个领域:

Realm Name: jdbcRealm
Class Name: com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm
JAAS Context: jdbcRealm
JNDI: jdbc/imagineSecurity
User Table: realm_user
User name column: username
Password column: password
Group table: realm_user_role_viw
Group name column: rolename
Digest algorithm: none
others fields are blank

我已经在安全设置下启用了安全管理器和默认主体到角色的映射。我还设置了默认领域jdbcDigest,只是为了确保我认为在web.xml中设置它就足够了。

我已经创建了jdbc资源,并测试了我可以从Web应用程序中访问它们,所以应该不会出现问题。

当我尝试登录时,我的表单如预期显示,但我得到以下错误:

警告:WEB9102:Web登录失败:com.sun.enterprise.security.auth.login.commun.LogiException:登录失败:管理员的文件登录失败。警告:异常com.sun.enterprise.security.auth.login.commun.LogiException:登录失败:管理员的文件登录失败。在com.sun.enterprise.security.auth.login.LognCextDriver.doPasswordLogin(LoginCextDriver.java:394)在com.sun.enterprise.security.auth.login.LognCextDriver.login(LoginCextDriver.java:240)在com.sun.enterprise.security.auth.login.LognCextDriver.login(LoginCextDriver.java:153)在com.sun.web.security.RemAdapter.authenticate(RealmAdapter.java:512)在com.sun.web.security.RemAdapter.authenticate(RealmAdapter.java:453)在org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:268)在org.apache.catalina.authenticator.AuthenticatorBase.processSecurityCheck(AuthenticatorBase.java:911)在org.apache.catalina.authenticator.AuthenticatorBase.ioke(AuthenticatorBase.java:546)在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623)在org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)网址:com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)在org.apache.catalina.core.StandardHostValv.invoke(StandardHostValve.java:162)在org.apache.catalina.connecter.CoyoteAdapter.doService(Coyotedapter.java:330)在org.apache.catalina.connecter.CoyoteAdapter.service(Coyotedapter.java:231)在com.sun.enterprise.v3.services.impl.ContainerMaper.service(ContainerMaper.java:174)在com.sun.grazzy.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)在com.sun.grazzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)在com.sun.grazzly.http.ProcessorTask.produce(ProcessorTask.java:1019)在com.sun.grazzy.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)在com.sun.grazzy.DefaultProtocolChain.executeProtocolFilter(DefaultProtocol Chain.java:137)在com.sun.grazzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)在com.sun.grazzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)在com.sun.grazzy.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)在com.sun.grazzy.ProtocolChainTextTask.doCall(ProtocolchainTextTask.java:54)在com.sun.grazzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)在com.sun.grazzy.ContextTask.run(ContextTask.java:71)com.sun.grazzy.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)在com.sun.grazzy.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)在java.lang.Thread.run(Thread.java:722)由以下原因引起:javax.security.auth.login.log异常:管理员的文件登录失败。在com.sun.enterprise.security.auth.login.FileLoginModule.authenticate(FileLoginModule.java:84)在com.sun.enterprise.security.auth.login.PasswordLoginModule.authenticateUser(密码登录模块.java:117)在com.sun.appserv.security.AppservPasswordLoginModule.login(AppservPasswordLogonModule.java:148)位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.ioke(Method.java:601)javax.security.auth.login.LognContext.uinvoke(LoginContext.java:784)在javax.security.auth.login.LognContext.access$000(LoginContext.java:203)在javax.security.auth.login.LognContext$4.run(LoginContext.java:698)在javax.security.auth.login.LognContext$4.run(LoginContext.java:696)位于java.security.AccessController.doPrivileged(本机方法)javax.security.auth.login.LognContext.invokePriv(LoginContext.java:695)在javax.security.auth.login.LognContext.login(LoginContext.java:594)在com.sun.enterprise.security.auth.login.LognCextDriver.doPasswordLogin(LoginCextDriver.java:382)…还有29个

这个错误让我特别担心的是它说:管理员的文件登录失败,这似乎表明它仍在使用文件领域。

我还有以下警告:警告:没有映射到Role[admin]的主体。但我认为默认主体到角色的映射设置应该处理该映射。

我确实在我的数据库中插入了一个管理员用户和角色,密码为admin

我错过了什么?

在服务器配置节点下添加领域而不是默认配置会有所帮助。

相关内容

  • 没有找到相关文章

最新更新