如何在spring security

时间:2016-07-25 02:17:35

标签: spring validation spring-security

目前我正在创建没有登录页面的网站。

我有另一个网站会发送一个包含信息的标题:

user:John
userCode:1234567

因此,我当前的网站将检查标头的内容,并在身份验证管理器中验证用户,如下所示:

首先我创建AuthenticationEntryPoint所以unauthentication用户将去那里。在AuthenticationEntryPoint我创建一个令牌并将用户重定向到主页面,所以在它进入主页面之前,spring会对用户进行身份验证并为有效用户提供令牌以使用该页面。代码是这样的:

@Component
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
         if(authException.getClass().getSimpleName().equals("InsufficientAuthenticationException")) {
            if (request.getHeader("user") != null) {
                UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(request.getHeader("user"), request.getHeader("userCode"));
                SecurityContextHolder.getContext().setAuthentication(auth);
                response.sendRedirect(request.getContextPath());
            }
        }
}

AuthenticationManager中,如果用户有效,该过程将照常进行并给予令牌。我需要改变什么或者可以在春天使用的其他方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的案例让我想起参考文档中的Siteminder implementation example。 使用Siteminder,标头(SM_USER)与HTTP请求一起传递。

这是Spring Security中预身份验证的一个示例。

您是否尝试过此配置? 他们首先定义一个"自定义过滤器"这是 RequestHeaderAuthenticationFilter 的实例。

文件摘录:

<security:http>
<!-- Additional http configuration omitted -->
<security:custom-filter position="PRE_AUTH_FILTER" ref="siteminderFilter" />
</security:http>

<bean id="siteminderFilter" class="org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter">
<property name="principalRequestHeader" value="SM_USER"/>
<property name="authenticationManager" ref="authenticationManager" />
</bean>

<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
    <bean id="userDetailsServiceWrapper"
        class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
    <property name="userDetailsService" ref="userDetailsService"/>
    </bean>
</property>
</bean>

<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="preauthAuthProvider" />
</security:authentication-manager>