Estou tentando desenvolver uma area de login com SpringSecurity 3 mas estou com duvidas na hora de injetar o managed bean, axei um exemplo
[code]@Component
public class AuthenticationService {
@Autowired
@Qualifier("authenticationManager")
private AuthenticationManager authenticationManager;
public boolean login(String username, String password) {
try {
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(username, password);
Authentication authenticate = authenticationManager.authenticate(token);
if (authenticate.isAuthenticated()) {
SecurityContextHolder.getContext().
setAuthentication(authenticate);
return true;
}
} catch (AuthenticationException e) {
e.printStackTrace();
}
return false;
}
public void logout() {
SecurityContextHolder.getContext().setAuthentication(null);
invalidateSession();
}
public Usuario getUsuarioLogado() {
return (Usuario) SecurityContextHolder.getContext().
getAuthentication().getPrincipal();
}
private void invalidateSession() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();
}[/code]
[code]@Component(“userDetailsService”)
public class UserDetailsServiceImpl implements UserDetailsService {
@PersistenceContext
private EntityManager entityManager;
private Usuario findByUsername(String username) {
try {
return (Usuario) entityManager.createNamedQuery("Usuario.findByUsername").setParameter("username", username).getSingleResult();
} catch (NoResultException e) {
throw new UsernameNotFoundException("Usuario nao encontrado");
}
}
public UserDetails loadUserByUsername(String string) throws UsernameNotFoundException, DataAccessException {
return findByUsername(string);
}
}[/code]
[code]public class Usuario implements Serializable, UserDetails {
private static final long serialVersionUID = -8451679170281063697L;
private Long id;
@NotNull
private String username;
@NotNull
private String password;
private List<Role> roles;[/code]
[code]@ManagedBean
@RequestScoped
public class LoginBean {
@ManagedProperty(value = "#{authenticationService}")
private AuthenticationService authenticationService;
private String userName;
private String password;
public String login() {
boolean success = authenticationService.login(userName, password);
if (!success) {
FacesMessage facesMessage =
new FacesMessage(FacesMessage.SEVERITY_ERROR, "",
"Login ou senha inválidos");
FacesContext.getCurrentInstance().
addMessage(null, facesMessage);
return "falhaLogin";
}
return "sucessoLogin";
}
public String logout() {
authenticationService.logout();
return "login";
}
}[/code]
[code]<html xmlns=“http://www.w3.org/1999/xhtml”
xmlns:h=“http://java.sun.com/jsf/html”
xmlns:f=“http://java.sun.com/jsf/core”
xmlns:ui=“http://java.sun.com/jsf/facelets”
xmlns:p=“http://primefaces.prime.com.tr/ui”>
<h:head>
<title>Spring Security + JSF + JPA</title>
<meta http-equiv="content-type" content="text/xhtml; charset=UTF-8" />
<link href="style/default.css" type="text/css" rel="stylesheet" />
</h:head>
<body >
<h:form prependId="false" >
<p:growl id="growlMessage" showDetail="true" />
<p:panel header="Entre com o seu login e senha"
style="width: 250px;margin: auto;">
<h:panelGrid columns="3" >
<h:outputLabel for="userName" value="Username: " />
<p:inputText id="userName" value="#{loginBean.userName}" />
<h:message for="userName" errorClass="error"/>
<h:outputLabel for="password" value="Password: " />
<p:password id="password" value="#{loginBean.password}" minLength="2"
feedback="false" />
<h:message for="password" errorClass="error"/>
<h:outputText value="" />
<p:commandButton type="submit" id="login"
action="#{loginBean.login}" value="Ok"
update="growlMessage" />
</h:panelGrid>
</p:panel>
</h:form>
</body>
</html>[/code]
ao executar esta dando o seguinte problema
SEVERE: Error Rendering View[/login.xhtml]
com.sun.faces.mgbean.ManagedBeanCreationException: Não foi possível criar o bean gerenciado loginBean. Os seguintes problemas foram encontrados:
- A propriedade authenticationService para o bean gerenciado loginBean não existe.
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:265)
at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
O que estou fazendo de errado, ou tem uma maneira melhor de fazer esse controle de usuario pelo SpringSecurity?
Obrigado