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.