Veja se consegue pegar o securityContext direto da sessão, assim:
SecurityContext securityContext = (SecurityContext) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SPRING_SECURITY_CONTEXT");
Veja se consegue pegar o securityContext direto da sessão, assim:
SecurityContext securityContext = (SecurityContext) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SPRING_SECURITY_CONTEXT");
Cara fiz isso que você me falou:
SecurityContext contextSpring = (SecurityContext) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SPRING_SECURITY_CONTEXT");
System.out.println("contextSpring: "+contextSpring);
no print deu null também.
Meu método login esta assim agora:
public String logar() throws ServletException, IOException {
try {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
RequestDispatcher dispatcher = ((HttpServletRequest) context.getRequest()).getRequestDispatcher("/j_spring_security_check");
dispatcher.forward((HttpServletRequest) context.getRequest(), (HttpServletResponse) context.getResponse());
FacesContext.getCurrentInstance().responseComplete();
// SecurityContext contextSpring = SecurityContextHolder.getContext();
SecurityContext contextSpring = (SecurityContext) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SPRING_SECURITY_CONTEXT");
System.out.println("contextSpring: "+contextSpring);
User user = null;
if (contextSpring instanceof SecurityContext) {
Authentication authentication = contextSpring.getAuthentication();
System.out.println("AUTHENTICATION: "+authentication);
if (authentication instanceof Authentication) {
user = (User) authentication.getPrincipal();
HttpSession session = (HttpSession) context.getSession(false);
session.setAttribute("usuarioLogado", usuarioFacade.consultaUsuario(user.getUsername()));
Usuario usu = (Usuario) session.getAttribute("usuarioLogado");
usuario = usu;
unidade = usuario.getUnidade();;
// id_cidade = usu.getCidade();
// id_funcao = usu.getFuncao();
verificarSenha(user.getPassword(), usu.getUsername());
}
}
} catch (Exception ex) {
FacesUtil.exibirMensagemErro(ex.getMessage());
}
return null;
}
V
Não sei se pode ser isso, mais o código do método logar() funciona perfeitamente na outra aplicação que tenho, a diferença é que nessa aplicação estou usando a versão Mobile do primefaces junto com JSF, e não tenho certeza se o spring security funciona na versão mobile do primefaces.
Será que esse problema do SecurityContextHolder.getContext(); de vir nulo pode ser por conta da versão mobile do primefaces?
V
Ao fazer o seguinte comando:
System.out.println("contextSpring: "+contextSpring);
ele me mostra isso no console:
INFO: contextSpring: org.springframework.security.core.context.SecurityContextImpl@ffffffff: Null authentication
não sei se isso pode ajudar mais…
Cara já faz um tempo que estou me debatendo nisso.
Remova FORWARD do filter mapping, mantenha somente o REQUEST e ERROR:
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
BOAAAA! passou!!!
Bom agora na hora de pegar o usuario:
user = (User) authentication.getPrincipal();
da esse erro:
INFO: ERRO: java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.security.core.userdetails.User
o contextSpring.getAuthentication(); pegou isso:
INFO: contextSpring: org.springframework.security.core.context.SecurityContextImpl@9056f12c: Authentication: org.springframework.security.authentication.AnonymousAuthenticationToken@9056f12c: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@380f4: RemoteIpAddress: 127.0.0.1; SessionId: 04a784135988b80af89a465ace32; Granted Authorities: ROLE_ANONYMOUS
agora só falta pegar o usuario, você poderia me ajudar a resolver mais esse problema?
O problema Foi resolvido obrigado.
Depurei mais se eu tirar o FORWARD o usuario vem com o problema descrito acima, o usuario vem como: anonymousUser e suas permissões também em como ROLE_anonymous, alguma outra solução?