Java request.getUserPrincipal()获取空值
用户已成功通过身份验证,但在身份验证后,当我转到下一个控制器时,我得到了Java request.getUserPrincipal()获取空值,java,security,spring,jakarta-ee,Java,Security,Spring,Jakarta Ee,用户已成功通过身份验证,但在身份验证后,当我转到下一个控制器时,我得到了request.getUserPrincipal()null。我使用的是WebSphere7,我的应用程序是SpringMVC System.out.println("subject.getPrincipals(): " + subject.getPrincipals()); WSSubject.setRunAsSubject(subject); 在登录控制器主体中进行身份验证后,getPrincipal()
request.getUserPrincipal()
null。我使用的是WebSphere7,我的应用程序是SpringMVC
System.out.println("subject.getPrincipals(): " + subject.getPrincipals());
WSSubject.setRunAsSubject(subject);
在登录控制器主体中进行身份验证后,getPrincipal()返回主体,但当我转到下一个控制器时,我得到了request.getUserPrincipal()
null
web.xml
<security-role>
<role-name>Administrator</role-name>
</security-role>
<security-constraint>
<display-name>manager_Service</display-name>
<web-resource-collection>
<web-resource-name>manageservice</web-resource-name>
<url-pattern>/manageServiceList.htm</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Administrator</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role>
<role-name>Administrator</role-name>
</security-role>
<security-role name="Administrator">
<group name="Administrator" />
</security-role>
管理员
服务经理
管理服务
/manageServiceList.htm
管理员
保密的
application.xml
<security-role>
<role-name>Administrator</role-name>
</security-role>
<security-constraint>
<display-name>manager_Service</display-name>
<web-resource-collection>
<web-resource-name>manageservice</web-resource-name>
<url-pattern>/manageServiceList.htm</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Administrator</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role>
<role-name>Administrator</role-name>
</security-role>
<security-role name="Administrator">
<group name="Administrator" />
</security-role>
管理员
ibm应用程序bnd.xml
<security-role>
<role-name>Administrator</role-name>
</security-role>
<security-constraint>
<display-name>manager_Service</display-name>
<web-resource-collection>
<web-resource-name>manageservice</web-resource-name>
<url-pattern>/manageServiceList.htm</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Administrator</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role>
<role-name>Administrator</role-name>
</security-role>
<security-role name="Administrator">
<group name="Administrator" />
</security-role>
用户属于管理员组。我所有的部署描述符都设置得很好。你知道我哪里出错了吗?你只是在保护一个url
/manageServiceList.htm
,所以如果用户访问另一个url,那么应该根本就没有主体。创建和配置自定义JAAS登录模块解决了这个问题。请参见清单4
不知道我以前的代码有什么问题。还有其他资源。但这不是我的问题。无论我访问受保护的资源还是不受保护的资源,都应该有一个主体。这可能是您想要的,但不是它的工作方式:当我记得正确时,您必须保护资源才能获得具有填充主体的请求。当然,保护资源不受任何限制(允许所有)是合法的。请参阅我的问题:“在登录控制器主体中进行身份验证后。GetPrincipal()返回principal,但当我转到下一个控制器时,我得到了request.getUserPrincipal()null”。有什么问题?为什么我把它设为空?@imran tariq:你说的下一个控制器是什么意思,一个映射到另一个(不受保护)url的控制器?下一个控制器的意思是什么。任何控制器登录后。问题是服务器容器并没有更新自身,即用户已通过身份验证,因此返回主体null。