【发布时间】:2014-11-21 22:11:18
【问题描述】:
在 OC4J 中,我们使用了自定义 JAAS LoginModule。我创建了一个复制相同逻辑的 SqlAuthenticator,这似乎有效。对于我们的应用程序,当我进入登录页面并输入错误密码时,它会将我发送到登录失败页面。那部分很好。
但是,当我输入正确的密码时,WebLogic 只是将我发送回欢迎页面,没有任何消息。我在日志文件中找不到任何可以帮助我的东西。我猜这是一个授权问题,而不是身份验证问题。我曾假设 SqlAuthenticator 会处理这个问题,因为它能够从数据库中获取我们应用程序的组和用户。
我以前从未处理过“角色”。我不确定它们与“组”有何不同,这是我们真正需要的。我需要定义角色吗?他们是否与“团体”联系在一起?是需要配置的角色和策略吗?我错过了什么?
这是日志文件的 sn-p
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> < Roles:Admin,Anonymous>
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> < Resource: type=<url>, application=ifactory-security, contextPath=/ifactory-security, uri=/secure/index.jsp, httpMethod=GET>
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> < Direction: ONCE>
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> < Context Handler: >
<SecurityEEngine> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <evaluate([Users: gkephart|Groups: Final Quality Control Release,users,EDA Failover,Enroll Administrators,Read Only,QA Documentation,Etrack2 Administrators|Roles: not null], type=<url>, application=ifactory-security, contextPath=/ifactory-security, uri=/secure/index.jsp, httpMethod=GET)>
<SecurityEEngine> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <Evaluating resource weblogic.entitlement.data.EResource@3557103 with expression: {Rol(Etrack2 Administrators,Etrack2 Administrators)}>
<SecurityEEngine> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <Evaluation result: false>
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <Default Authorization isAccessAllowed(): returning DENY>
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <com.bea.common.security.internal.service.AccessDecisionServiceImpl.isAccessAllowed AccessDecision returned DENY>
<SecurityAdjudicator> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <com.bea.common.security.internal.service.AdjudicationServiceImpl.adjudicate Results=[ DENY ]>
<SecurityAdjudicator> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <com.bea.common.security.internal.service.AdjudicationServiceImpl.adjudicate Resource=type=<url>, application=ifactory-security, contextPath=/ifactory-security, uri=/secure/index.jsp, httpMethod=GET>
<SecurityAdjudicator> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <DefaultAdjudicatorImpl.adjudicate results: DENY >
<SecurityAdjudicator> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <com.bea.common.security.internal.service.AdjudicationServiceImpl.adjudicate Adjudictor returned false, returning that value>
<SecurityAtz> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1416943077504> <BEA-000000> <com.bea.common.security.internal.service.AuthorizationServiceImpl.isAccessAllowed returning adjudicated: false>
这是 web.xml 的相关部分
<security-constraint>
<web-resource-collection>
<web-resource-name>SecurePages</web-resource-name>
<description>All secure pages</description>
<url-pattern>/secure/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Etrack2 Administrators</role-name>
</auth-constraint>
<user-data-constraint>
<description>SSL not required</description>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>Etrack2 Administrators</role-name>
</security-role>
这是我的 weblogic.xml。请注意,我添加了一个组和一个用户作为主体。
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<description><![CDATA[Generated by XDoclet. Use weblogicwebxml's description attribute to modify this value.]]></description>
<weblogic-version>12</weblogic-version>
<!--
If you do not define a security-role-assignment element and its sub-elements, the Web application container implicitly
maps the role name as a principal name and logs a warning.
The EJB container does not deploy the module if mappings are not defined.
Consider the following usage scenarios for the role name is "role_xyz"
* If you map "role_xyz" to user "joe" in weblogic.xml, role_xyz becomes a local role.
* If you specify role_xyz as an externally defined role, it becomes global (it refers to the role defined at the realm level).
* If you do not define a security-role-assignment element, role_xyz becomes a local role,
and the Web application container creates an implicit mapping to it and logs a warning.
-->
<security-role-assignment>
<role-name>Etrack2 Administrators</role-name>
<principal-name>Etrack2 Administrators</principal-name>
<principal-name>gkephart</principal-name>
</security-role-assignment>
<context-root>/ifactory-security</context-root>
</weblogic-web-app>
【问题讨论】:
-
有趣的是,在 FireFox 上我得到了欢迎页面,但在 IE 上我得到了 HTTP 403 错误页面。
-
当您输入错误密码与正确密码时,管理员/服务器日志会显示什么?这里没有足够的信息来提供帮助。你有没有像这样的例子:middlewaremagic.com/weblogic/?p=5476
-
我附上了显示授权失败的日志文件摘录。顺便说一句,您提供的 URL 无法访问。
-
奇怪的是,我也无法访问该 URL - 我认为他们的 DNS 出现故障。
标签: security weblogic12c oc4j