【问题标题】:Spring - Java EE User still null after authenticationSpring - Java EE 用户在身份验证后仍然为空
【发布时间】:2013-03-24 05:50:19
【问题描述】:

我是 Java EE / Spring 的新手,过去两天我一直在与安全性作斗争。我终于可以使用 Java EE 进行身份验证并使用 Spring 进行授权了。不幸的是,我无法从 Spring 访问 Java EE 身份验证来进行授权。

应用程序的总体思路是这样的:

  1. 如果你没有登录,Spring security 会将你重定向到登录页面
  2. 登录页面是唯一被 Java EE 锁定的页面。它输出一个用于身份验证的表单
  3. 成功登录后,用户被重定向到主页,该主页应该有与之关联的身份验证对象。

注意对应该的强调,因为它不是。无论出于何种原因,用户都以经过身份验证但匿名的身份返回。如果我可以简单地获取用户名,我可以构建用户详细信息。

这是来自我的web.xml的相关sn-ps:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</filter>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Home Page Only</web-resource-name>
        <description>Rely on Spring for Authorization</description>
        <url-pattern>/login</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login</form-login-page>
        <form-error-page>/loginfailed</form-error-page>
    </form-login-config>
</login-config>

还有我的spring security-content.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:lang="http://www.springframework.org/schema/lang"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.1.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <http auto-config='true' use-expressions="true">
        <intercept-url pattern="/about" access="permitAll"/>
        <intercept-url pattern="/login" access="permitAll"/>
        <intercept-url pattern="/loginfailed" access="permitAll"/>
        <intercept-url pattern="/css/*" access="permitAll"/>
        <intercept-url pattern="/resources/*" access="permitAll"/>
        <intercept-url pattern="/images/*" access="permitAll"/>
        <intercept-url pattern="/js/*" access="permitAll"/>
        <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
        <form-login default-target-url='/index.jsp' 
            always-use-default-target='true' login-page="/login"
            authentication-failure-url="/loginfailed"
        />
    </http>
    <authentication-manager alias="authenticationManager">
        <authentication-provider ref="securityRef"/>
    </authentication-manager>
    <beans:bean id="securityRef"
        class="my.custom.authprovider.AuthenticationProviderImpl"/>
</beans:beans>

有什么想法吗?

【问题讨论】:

    标签: spring security jakarta-ee spring-security


    【解决方案1】:

    如果你想使用 Java EE 身份验证,你应该配置 PreAuthenticatedProcessingFilter(更准确地说是 J2eePreAuthenticatedProcessingFilter)。 此外,您需要配置 J2eeBasedPreAuthenticatedWebAuthenticationDetailsS​​ource 来填充用户授予的权限: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#j2ee-preauth-details

    顺便说一句,您认为使用 Java EE 表单身份验证有什么优势?

    添加在评论之后。

    如果需要使用 Java EE 身份验证,您的方法应该更正:您应该通过 Java EE 身份验证保护整个应用程序。 在这种情况下,到达 Spring Security 的每个请求都将通过 Java EE 容器进行身份验证,并且 Spring Security 可以通过 J2eePreAuthenticatedProcessingFilter 对请求进行身份验证。 所以修正后的流程

    1. 如果用户未登录,Java EE 容器会将用户重定向到登录页面

    2. 认证成功后,用户被重定向到受 Spring Security 保护的页面。 Spring Security 可以通过 J2eePreAuthenticatedProcessingFilter 对请求进行身份验证。

    【讨论】:

    • 老实说,我宁愿不使用它,但该应用程序运行在 WAS 服务器上,该服务器设置为使用 J2EE 针对 Active Directory 进行身份验证。我之前尝试过使用 J2eePreAuthenticatedProcessingFilter 和不同的设置。我将尝试在此设置中使用它,并告诉您结果如何。
    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2014-02-14
    • 2013-12-01
    • 2015-06-09
    • 2011-05-11
    • 1970-01-01
    • 2017-03-13
    • 2011-01-13
    相关资源
    最近更新 更多