2

我正在尝试让 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>

在 glassfish 我定义了一个领域:

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.common.LoginException:登录失败:管理员文件登录失败。警告:com.sun.enterprise.security.auth.login.common.LoginException 异常:登录失败:管理员文件登录失败。在 com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394) 在 com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240) 在 com.sun .enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153) 在 com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:512) 在 com.sun.web.security.RealmAdapter.authenticate (RealmAdapter.java:453) 在 org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:268) 在 org. SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com .sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 原因:javax.security.auth.login.LoginException:文件登录失败对于管理员。在 com.sun.enterprise.security.auth.login.FileLoginModule.authenticate(FileLoginModule.java:84) 在 com.sun.enterprise.security.auth.login.PasswordLoginModule.authenticateUser(PasswordLoginModule.java:117) 在 com.sun .appserv.security.AppservPasswordLoginModule.login(AppservPasswordLoginModule.java:148) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect。

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

我还有以下警告:警告:没有映射到角色 [admin] 的主体。但我相信默认主体到角色映射设置应该负责该映射。

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

我错过了什么?

4

1 回答 1

2

在 server-config 节点下添加领域而不是 default-config 会有所帮助。

于 2012-04-15T14:31:31.313 回答