2017-10-09 1 views
0

Je souhaite créer un utilisateur de rôle pour me connecter. Donc, je suis toujours confus comment créer un rôle utilisateur et se connecter avec l'utilisateur du rôle. J'ai fait un peu de code source comme ci-dessous:Comment créer un login de rôle utilisateur?

User.java:

package com.practice.login.entity; 

import javax.persistence.*; 
import java.util.Set; 

@Entity 
@Table(name = "user") 
public class User { 
    private Long id; 
    private String username; 
    private String password; 
    private String passwordConfirm; 
    private Set<Role> roles; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long idUser) { 
     this.id = idUser; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    @Transient 
    public String getPasswordConfirm() { 
     return passwordConfirm; 
    } 

    public void setPasswordConfirm(String passwordConfirm) { 
     this.passwordConfirm = passwordConfirm; 
    } 

    @ManyToMany 
    @JoinTable(
      name = "user_role", 
      joinColumns = @JoinColumn(
        name = "user_id"), 
      inverseJoinColumns = @JoinColumn(
        name = "role_id")) 
    public Set<Role> getRoles() { 
     return roles; 
    } 

    public void setRoles(Set<Role> roles) { 
     this.roles = roles; 
    } 
} 

Role.java

package com.practice.login.entity; 

import javax.persistence.*; 
import java.util.Set; 

@Entity 
@Table(name = "role") 
public class Role { 
    private Long id; 
    private String name; 
    private Set<User> users; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @ManyToMany(mappedBy = "roles") 
    public Set<User> getUsers() { 
     return users; 
    } 

    public void setUsers(Set<User> users) { 
     this.users = users; 
    } 
} 

UserService.java:

package com.practice.login.service; 

import com.practice.login.entity.User; 

public interface UserService { 

    void save(User user); 

    User findByUsername(String username); 

} 

UserServiceImpl.java

package com.practice.login.service; 

import com.practice.login.entity.User; 
import com.practice.login.repository.RoleRepository; 
import com.practice.login.repository.UserRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 
import org.springframework.stereotype.Service; 

import java.util.HashSet; 

@Service 
public class UserServiceImpl implements UserService { 
    @Autowired 
    private UserRepository userRepository; 
    @Autowired 
    private RoleRepository roleRepository; 
    @Autowired 
    private BCryptPasswordEncoder bCryptPasswordEncoder; 

    @Override 
    public void save(User user) { 
     user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); 
     user.setRoles(new HashSet<>(roleRepository.findAll())); 
     userRepository.save(user); 
    } 

    @Override 
    public User findByUsername(String username) { 
     return userRepository.findByUsername(username); 
    } 
} 

UserDetailServiceImpl.java

package com.practice.login.service; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.security.core.GrantedAuthority; 
import org.springframework.security.core.authority.SimpleGrantedAuthority; 
import org.springframework.security.core.userdetails.UserDetails; 
import org.springframework.security.core.userdetails.UserDetailsService; 
import org.springframework.security.core.userdetails.UsernameNotFoundException; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

import com.practice.login.entity.Role; 
import com.practice.login.entity.User; 
import com.practice.login.repository.UserRepository; 

import java.util.HashSet; 
import java.util.Set; 

@Service 
public class UserDetailsServiceImpl implements UserDetailsService { 
    @Autowired 
    private UserRepository userRepository; 

    @Override 
    @Transactional(readOnly = true) 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     User user = userRepository.findByUsername(username); 
     Set<GrantedAuthority> grantedAuthorities = new HashSet<>(); 
     for (Role role : user.getRoles()) { 
      grantedAuthorities.add(new SimpleGrantedAuthority(role.getName())); 
     } 

     return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), 
       grantedAuthorities); 
    } 
} 

UserRepository.java

package com.practice.login.repository; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.stereotype.Repository; 

import com.practice.login.entity.User; 

@Repository 
public interface UserRepository extends JpaRepository<User, Long> { 
    User findByUsername(String username); 
} 

RoleRepository.java

package com.practice.login.repository; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.stereotype.Repository; 

import com.practice.login.entity.Role; 

@Repository 
public interface RoleRepository extends JpaRepository<Role, Long> { 
} 

Comment se connecter avec privilages rôle?

Répondre

0

Cela dépend surtout de votre configuration HttpSecurity:

Exemple SecurityConfig.java:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(final HttpSecurity http) throws Exception { 
     // @formatter:off 
     http 
      .csrf().disable() 
      .authorizeRequests() 
      .antMatchers("/login*", "/logout*").permitAll() 
      .antMatchers("/user/updatePassword*", "/user/savePassword*").hasRole("ROLE_USER") 
      .antMatchers("/admin/**").hasRole("ROLE_ADMIN") 
      .and() 
      .formLogin() 
      .loginPage("/login") 
      .defaultSuccessUrl("/homepage.html") 
      .permitAll() 
      .and() 
      .logout() 
      .logoutSuccessUrl("/logout.html") 
      .permitAll(); 
     // @formatter:on 
    } 

} 
+0

merci monsieur, puis-je utiliser le code ci-dessous en? –