Добавление ролей пользователям в Spring boot и Mysql - PullRequest
0 голосов
/ 11 октября 2019

У меня есть пользовательская база данных с 3 отдельными таблицами, включая: auth__role, auth_user, auth_user_role. На данный момент я могу создать простого пользователя сайта с регистрационной формой. Но если я хочу дать пользователю роль администратора, я могу только посетить мою базу данных mysql и назначить им роли вручную. Я хочу добавить user_roles с добавлением поля со списком в мою регистрационную форму. Но так как я начинающий весенний разработчик, мне любопытно, что мне нужно сделать дальше. Вот что я сделал:

есть 3 роли: SUPER_ADMIN, ADMIN, SITE_USER

UserController.class

@Controller
public class UserController {
    @Autowired
    UserService userService;
    @RequestMapping(value = {"/user_add"},method = RequestMethod.GET)
    public ModelAndView client_add() {
        ModelAndView modelAndView = new ModelAndView();
        User user = new User();
        modelAndView.addObject("user",user);
        modelAndView.setViewName("user_add");
        return modelAndView;
    }


    @RequestMapping(value="/user_add",method=RequestMethod.POST)
    public ModelAndView registerUser(@Valid User user,BindingResult bindingResult,ModelMap modelMap)
    {
        ModelAndView modelAndView  = new ModelAndView();

        if(bindingResult.hasErrors()) {
            modelAndView.addObject("successMessage","Iltimos xatoliklarni to'g'irlang");
            modelMap.addAttribute("bindingResult", bindingResult);
        }else if(userService.isUserAlreadyPresent(user)){
            modelAndView.addObject("successMessage", "Foydalanuvchi mavjud");

        }else {
            userService.saveUser(user);
            modelAndView.addObject("successMessage", "foydalanuvchi yuklandi");
        }
        modelAndView.addObject("user",new User());
        modelAndView.setViewName("user_add");
        return modelAndView;

    }

UserService.class

package io.javabrains;

import java.util.Arrays;
import java.util.HashSet;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import io.javabrains.Entities.Role;
import io.javabrains.Entities.User;
import io.javabrains.repository.RoleRepository;
import io.javabrains.repository.UserRepository;
@Service
public class UserServicelmp implements UserService {
  @Autowired
    BCryptPasswordEncoder encoder;
  @Autowired
  RoleRepository roleRepository;
  @Autowired
  UserRepository userRepository;


    @Override
    public void saveUser(User user) {

        user.setPassword(encoder.encode(user.getPassword()));
        user.setStatus("VERIFIED");
        Role userRole = roleRepository.findByRole("SITE_USER");
        user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
        userRepository.save(user);

    }

    @Override
    public boolean isUserAlreadyPresent(User user) {





        return false;
    }

}

WebSecurity.class

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;
    @Autowired
    private CustomLoginSuccessHandler successHandler;


    @Autowired
    private DataSource dataSource;

    @Value("${spring.queries.users-query}")
    private String usersQuery;

    @Value("${spring.queries.roles-query}")
    private String rolesQuery;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().usersByUsernameQuery(usersQuery).authoritiesByUsernameQuery(rolesQuery)
                .dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
                // URLs matching for access rights
                .antMatchers("/").permitAll()
                .antMatchers("/login").permitAll()
                .antMatchers("/register").permitAll()
                .antMatchers("/home/**").hasAnyAuthority("SUPER_USER", "ADMIN_USER", "SITE_USER")
                .antMatchers("/admin/**").hasAnyAuthority("SUPER_USER","ADMIN_USER")
                .anyRequest().authenticated()
                .and()
                // form login
                .csrf().disable().formLogin()
                .loginPage("/login")
                .failureUrl("/login?error=true")
                .successHandler(successHandler)
                .usernameParameter("email")
                .passwordParameter("password")
                .and()
                // logout
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/").and()
                .exceptionHandling()
                .accessDeniedPage("/access-denied");
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**");
    }

}

Пользователь. Класс

@Entity
@Table(name = "auth_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "auth_user_id")
    private int id;
  @NotNull(message = "Ismni kiriting")
    @Column(name = "first_name")
    private String name;
@NotNull(message = "Familyani kiriting")
    @Column(name = "last_name")
    private String lastName;
@NotNull(message = "Email is compulsory")
  @Email(message = "email is invalid")
  @Column(name = "email")
    private String email;
  @NotNull(message = "password kiriting")
    @Column(name = "password")
  @Length(min=5,message="Parol eng kamida 5 belgidan iborat bo'lsin")
    private String password;


    @Column(name = "status")
    private String status;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "auth_user_role", joinColumns = @JoinColumn(name = "auth_user_id"), 
    inverseJoinColumns = @JoinColumn(name = "auth_role_id"))
    private Set<Role> roles;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

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



    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Set<Role> getRoles() {
        return roles;
    }

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


}

Role.class

@Entity
@Table(name = "auth_role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "auth_role_id")
    private int id;

    @Column(name = "role_name")
    private String role;

    @Column(name = "role_desc")
    private String desc;

    public int getId() {
        return id;
    }

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

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...