Uso programático da Spring Security

estou usandoPostigo com o Wicket Auth Project para minha camada de apresentação e, portanto, integrei-o ao Spring Security. Este é o método que é chamado pelo Wicket para autenticação para mim:

@Override
public boolean authenticate(String username, String password) {
    try {
        Authentication request = new UsernamePasswordAuthenticationToken(
                username, password);
        Authentication result = authenticationManager.authenticate(request);
        SecurityContextHolder.getContext().setAuthentication(result);
    } catch (AuthenticationException e) {
        return false;
    }
    return true;
}

O conteúdo (dentro) da minha configuração XML do Spring Security é:

<http path-type="regex">
    <form-login login-page="/signin"/>
<logout logout-url="/logout" />
</http>
<global-method-security secured-annotations="enabled" />
<authentication-manager alias="authenticationManager"/>
<authentication-provider user-service-ref="userService">
    <password-encoder ref="bcryptpasswordencoder" />
</authentication-provider>

A seção2.3.6. Proteção de Ataque de Fixação de Sessão da documentação de referência diz:

Ataques de fixação de sessão são um risco potencial onde é possível que um invasor mal-intencionado crie uma sessão acessando um site e persuadir outro usuário a efetuar login com a mesma sessão (enviando um link contendo o identificador de sessão como um parâmetro, por exemplo). O Spring Security protege contra isso automaticamente, criando uma nova sessão quando um usuário faz o login. Se você não precisar dessa proteção ou entrar em conflito com algum outro requisito, poderá controlar o comportamento usando o atributo session-fixation-protection, que tem três opções:

migrateSession - cria uma nova sessão e copia os atributos da sessão existente para a nova sessão. Este é o padrão.nenhum - não faça nada. A sessão original será mantida.newSession - Crie uma nova sessão "limpa", sem copiar os dados da sessão existente.

A autenticação funciona, mas como sou relativamente novo no Spring Security, tenho algumas perguntas que preciso de respostas também:

Normalmente, para o login, eu POSTARIA as informações de autenticação paraj_spring_security_check e deixe o Spring Security executar o código de autenticação real. Eu gostaria de ter proteção contra ataques de fixação de sessão, eu vou conseguir quando eu realizar um login programático como eu faço? E se não, o que eu teria que fazer para obtê-lo?Como faço para realizar logout programático?Como utilizarei o login e logout programático, como desabilito o Spring da interceptação desses URLs?

Atualizar: Para proteção de ataque de fixação de sessão, parece que preciso chamar o método na classe SessionUtils com a assinaturastartNewSessionIfRequired(HttpServletRequest request, boolean migrateAttributes, SessionRegistry sessionRegistry).

Como obtenho a instância de SessionRegistry que preciso passar? Não consigo encontrar uma maneira de criar um ID de alias ou como obter seu ID ou nome.

questionAnswers(6)

yourAnswerToTheQuestion