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。