身份验证成功启动后执行代码

时间:2018-12-27 13:54:25

标签: java spring-boot authentication spring-security ldap

我想在成功认证后执行代码,以将某些角色添加到我的用户对象中:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Value("${ad.domain}")
    private String AD_DOMAIN;

    @Value("${ad.url}")
    private String AD_URL;

    @Autowired
    UserRoleComponent userRoleComponent;

    private final Logger logger = LoggerFactory.getLogger(WebSecurityConfig.class);

    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        this.logger.info("Verify logging level"); //works
        http
                .authorizeRequests()
                .anyRequest()
                .fullyAuthenticated()
            .and()
                .formLogin()
                .successHandler(new AuthenticationSuccessHandler() {

                    @Override
                    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {

                        userRoleComponent.testIt();
                        redirectStrategy.sendRedirect(request, response, "/");

                    }
                })
            .and()
                .httpBasic();

        http.formLogin().defaultSuccessUrl("/", true);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
    }

    @Bean
    public AuthenticationManager authenticationManager() {
        return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
    }

    @Bean
    public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
        ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(AD_DOMAIN,
                AD_URL);
        provider.setConvertSubErrorCodesToExceptions(true);
        provider.setUseAuthenticationRequestCredentials(true);
        return provider;
    }
}

所以我尝试添加一个新的AuthenticationSuccessHandler来插入要在组件中执行的代码(这是应该在其中添加角色的地方)。

在我的UserRoleController中:

@Component
public class UserRoleComponent {

    private Logger logger = LoggerFactory.getLogger(UserRoleComponent.class);

    public void testIt() {
        this.logger.info("=============== User Authentication ==============");
        System.out.println("================ User Authentication ================");

    }

}

现在不幸的是,当我成功登录时,没有打印输出。我该如何解决这个问题?

编辑:我确认登录级别正确,并且system.out.println也不起作用。

0 个答案:

没有答案