当前位置: 首页 > 知识库问答 >
问题:

使用javaconfig进行Spring Security预认证

龙涵蓄
2023-03-14

我正在尝试使用外部服务在Spring设置预身份验证安全性。登录入口点重定向到一个外部页面,该页面在成功登录后会将身份验证信息放入 Cookie 中。之后,外部应用程序重定向回我的应用程序,并且我的 AbstractPreauthicatedProcessingFilter被正确调用,并且我能够返回一个主体值,然后我希望将其传递给我的用户详细信息服务,在那里我可以创建正确的用户对象,但它最终会在此之前抛出错误。这是代码

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private UserDetailsService userDetailsService;
    private PreAuthenticatedAuthenticationProvider preAuthenticatedProvider;

    @Autowired
    private CspProperties cspProperties;

    public SecurityConfig() {
        super();

        userDetailsService = new CspUserDetailService();
        UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken> wrapper = 
                new UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken>(userDetailsService);

        preAuthenticatedProvider = new PreAuthenticatedAuthenticationProvider();
        preAuthenticatedProvider.setPreAuthenticatedUserDetailsService(wrapper);
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(preAuthenticatedProvider);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        CspAuthenticationFilter cspFilter = new CspAuthenticationFilter();
        cspFilter.setAuthenticationManager(authenticationManager());

        //entry point
        LoginUrlWithReturnUrlEntryPoint entryPoint = new LoginUrlWithReturnUrlEntryPoint(cspProperties.getNoCookieURL());

        http
            .addFilter(cspFilter)
            .authorizeRequests()
                .antMatchers("/secure").authenticated()
                .anyRequest().permitAll()
                .and()
            .httpBasic()
                .authenticationEntryPoint(entryPoint);
    }
}

这就是我犯的错误

2014-06-28 12:30:46.522 DEBUG 13752 --- [nio-8080-exec-3] secure.CspAuthenticationFilter           : Checking secure context token: null
2014-06-28 12:30:46.524 DEBUG 13752 --- [nio-8080-exec-3] secure.CspAuthenticationFilter           : preAuthenticatedPrincipal = 6045656|aeb4b387f41c1557cfb2604
881840b96|W|40|CDTTut,CompXL|xxxxx|PROD|201406290157, trying to authenticate
2014-06-28 12:30:46.524 DEBUG 13752 --- [nio-8080-exec-3] secure.CspAuthenticationFilter           : Cleared security context due to exception

org.springframework.security.authentication.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.web.authentication.preau
th.PreAuthenticatedAuthenticationToken
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
    at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doAuthenticate(AbstractPreAuthenticatedProcessingFilter.jav
a:121)
    at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:91)

任何帮助都将不胜感激

共有1个答案

巫马炫明
2023-03-14

结果证明这个配置是正确的,问题出在预授权过滤器,在某些情况下它应该返回null。

 类似资料:
  • 我的要求是: 在我的应用程序中,当用户通过登录屏幕(而不是使用Spring Security)登录时,身份验证第一次由定制的第三方API执行。现在,我们几乎没有使用rest服务调用的增强功能。根据要求,在从应用程序发出任何rest调用之前,我们需要根据数据库重新验证用户。由于用户在使用登录屏幕登录时已经进行了验证,并且请求中提供了这些详细信息,因此我计划使用spring security对用户进行

  • 我目前正在使用Spring Boot创建一个新的web应用程序,并开始集成Spring Security进行身份验证。在成功地学习了基于Spring Boot的LDAP教程之后,我想将基于JavaConfig的配置指向我的Active Directory实例。 我的应用程序现在按预期处理错误凭据,但有效凭据现在会导致 这是一个常见的问题——在许多地方都遇到过这个问题。解决方案似乎是设置上下文。引用

  • 我正在尝试将Hawtio(1.4.64)连接到运行在Tomcat7的Spring应用程序中的Jolokia代理(1.3.3)。 在最近升级到Spring Security(4.0.3)之后,hawtio停止了正确的身份验证(使用基本auth),我们被踢回登录页面,类似于问题#1975。与这个问题不同的是,我们只使用Jolokia代理,而不是在应用程序中包含hawtio(我们没有使用Spring B

  • 我们在将主干中编写的单页应用程序与SAML身份验证挂钩时遇到了一些问题。下面是我们的数据(基于http://developer.okta.com/docs/guides/saml_guidance#planning-对于saml)-SPA已加载-首先对后端(SP)的请求导致响应,告诉其重定向IDP-然后浏览器位于IDP页面。基本上,我们的SPA已经消失了-成功登录后,IDP会用帖子重定向。此帖子包

  • 我正在尝试使用Spring Security UserDetailService身份验证使用电子邮件而不是用户名登录,但我无法登录并获取 org.springframework.security.authentication.内部身份验证服务异常。 调试代码时,调试器不会跟踪 用户user=userDao。findByUserName(用户电子邮件);来自UserServiceImpl。java和

  • 我正在编写一个需要用户登录的web应用程序。我的公司有一个Active Directory服务器,我想为此目的使用它。但是,我在使用Spring验证用户凭据时遇到了麻烦。 完整StackTrace: 当我使用Ldap-Explorer浏览广告并搜索(Spring在ActiveDirectoryLdapAuthenticationProvider:SearchForUser(...)中这样做)时,它