Alo galera tudo bem? Sou iniciante a JSF e Spring Security. Estou tentando fazer um login baseado em Roles.
Por exemplo:
Se o programa detetar que o usuario tem ROLE_USER ele vai para pasta gestor
Se o usuario detetar que o ususareio tem ROLE_ADMIN ele vai para pasta admin
Consigo fazer login quando e apenas um usuario, a minha dificuldade e ele saber em que pasta deve entrar oszinho, ou seja, quero multiplos tragetos um para cada tipo de usuario.
packagemz.co.mpteventos.springsecurity.controller;importjava.util.List;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.ViewScoped;importorg.springframework.security.core.Authentication;importorg.springframework.security.core.context.SecurityContextHolder;importorg.springframework.security.core.userdetails.UserDetails;importorg.springframework.security.core.userdetails.UserDetailsService;importorg.springframework.security.core.userdetails.UsernameNotFoundException;importmz.co.mpteventos.springsecurity.dao.DAO;importmz.co.mpteventos.springsecurity.dto.UserDetailsImpl;importmz.co.mpteventos.springsecurity.model.Conta;@ManagedBean@ViewScopedpublicclassUserDetailServiceImplimplementsUserDetailsService{privateList<Conta>listaConta;@OverridepublicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException{// cria-se lista de contas e mete-se todas contas da base de dads nessa listalistaConta=newDAO<Conta>(Conta.class).listaTodos();for(inti=0;i<this.listaConta.size();i++){if(listaConta.get(i).getNome().equals(username)){UserDetailsImpluser=newUserDetailsImpl();user.setUserName(listaConta.get(i).getNome().toString());user.setPassword(listaConta.get(i).getPassword().toString());user.addAuthority(listaConta.get(i).getAuthorities().toString());returnuser;}}thrownewUsernameNotFoundException("Usuario não encontrado");}publicStringgetUsuarioLogado(){Authenticationauthentication=SecurityContextHolder.getContext().getAuthentication();StringcurrentPrincipalName=authentication.getName();returncurrentPrincipalName.toString();}}
Alo, Narclk obrigado desde ja… bem eu nao percebi muito bem a sua explicação nem como eu poderia aproveitar esse codigo com o meu codigo. Sera que voce podeia ser mais explicito por faovor?
Obrigado. Consegui resolver dessa forma que sugeriu muuito obrigado.
COnsegui uma segunda Solucao aqui que deu certo vou postar:
packagemz.co.mpteventos.springsecurity.controller;importjava.io.IOException;importjava.util.List;importjava.util.Set;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.ViewScoped;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.springframework.security.core.Authentication;importorg.springframework.security.core.authority.AuthorityUtils;importorg.springframework.security.core.context.SecurityContextHolder;importorg.springframework.security.core.userdetails.UserDetails;importorg.springframework.security.core.userdetails.UserDetailsService;importorg.springframework.security.core.userdetails.UsernameNotFoundException;importorg.springframework.security.web.authentication.AuthenticationSuccessHandler;importorg.springframework.stereotype.Controller;importmz.co.mpteventos.springsecurity.dao.DAO;importmz.co.mpteventos.springsecurity.dto.UserDetailsImpl;importmz.co.mpteventos.springsecurity.model.Conta;@ManagedBean@ViewScoped@ControllerpublicclassUserDetailServiceImplimplementsUserDetailsService,AuthenticationSuccessHandler{privateList<Conta>listaConta;@OverridepublicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException{// cria-se lista de contas e mete-se todas contas da base de dads nessa listalistaConta=newDAO<Conta>(Conta.class).listaTodos();for(inti=0;i<this.listaConta.size();i++){if(listaConta.get(i).getNome().equals(username)){UserDetailsImpluser=newUserDetailsImpl();user.setUserName(listaConta.get(i).getNome().toString());user.setPassword(listaConta.get(i).getPassword().toString());user.addAuthority(listaConta.get(i).getAuthorities().toString());returnuser;}}thrownewUsernameNotFoundException("Usuario não encontrado");}@OverridepublicvoidonAuthenticationSuccess(HttpServletRequestrequest,HttpServletResponseresponse,Authenticationauthentication)throwsIOException,ServletException{Set<String>roles=AuthorityUtils.authorityListToSet(authentication.getAuthorities());if(roles.contains("ROLE_ADMIN")){response.sendRedirect(request.getContextPath()+"/faces/admin/visualizaractualizarestabelecimentoadmin.xhtml");return;}response.sendRedirect(request.getContextPath()+"/faces/gestor/visualizaractualizarestabelecimento.xhtml");}publicStringgetUsuarioLogado(){Authenticationauthentication=SecurityContextHolder.getContext().getAuthentication();StringcurrentPrincipalName=authentication.getName();returncurrentPrincipalName.toString();}}##security.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:util="http://www.springframework.org/schema/util"xmlns:security="http://www.springframework.org/schema/security"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><security:http><security:intercept-urlpattern="/faces/gestor/"access="ROLE_USER"/><security:intercept-urlpattern="/faces/admin/"access="ROLE_ADMIN"/><security:form-loginlogin-page="/login.html"authentication-success-handler-ref="userDetailServiceImpl"authentication-failure-url="/login.html?erro=true"/><security:logoutlogout-success-url="/login.html"/></security:http><beanclass="mz.co.mpteventos.springsecurity.controller.UserDetailServiceImpl" id="userDetailServiceImpl"></bean> <security:authentication-manager> <security:authentication-provider user-service-ref="userDetailServiceImpl"></security:authentication-provider></security:authentication-manager></beans>