Rumah > Java > javaTutorial > Bagaimana untuk menggunakan rangka kerja pengesahan dan kebenaran dalam Java untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran?

Bagaimana untuk menggunakan rangka kerja pengesahan dan kebenaran dalam Java untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran?

WBOY
Lepaskan: 2023-08-02 11:49:19
asal
1968 orang telah melayarinya

Bagaimana untuk menggunakan rangka kerja pengesahan dan kebenaran dalam Java untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran?

Pengenalan:
Dalam kebanyakan aplikasi, pengesahan pengguna dan pengurusan kebenaran adalah fungsi yang sangat penting. Terdapat banyak rangka kerja pengesahan dan kebenaran dalam Java yang tersedia untuk pembangun, seperti Spring Security, Shiro, dsb. Artikel ini akan menumpukan pada cara menggunakan rangka kerja Spring Security untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran.

1. Pengenalan kepada Spring Security
Spring Security ialah rangka kerja keselamatan yang berkuasa Ia adalah pemalam berdasarkan rangka kerja Spring dan boleh digunakan untuk menambah fungsi pengesahan dan kebenaran. Spring Security menyediakan banyak fungsi, seperti pengesahan pengguna, pengurusan peranan, pengurusan kebenaran, dll.

2. Pengesahan
Pengesahan ialah proses mengesahkan identiti pengguna. Dalam Spring Security, pengesahan pengguna boleh dicapai dengan mengkonfigurasi penyedia pengesahan.

  1. Fail Konfigurasi
    Pertama, pembekal pengesahan perlu dikonfigurasikan dalam fail konfigurasi Spring. Pembekal pengesahan boleh ditakrifkan menggunakan elemen <authentication-manager>. <authentication-manager>元素来定义认证提供程序。
<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService"/>
</authentication-manager>
Salin selepas log masuk
  1. 自定义认证提供程序
    接下来,需要自定义一个用户细节服务类,用于加载用户的详细信息,例如用户名、密码、角色等。可以实现UserDetailsService接口来实现这个类。
@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;
    
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found with username: " + username);
        }
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user.getRoles()));
    }
    
    private Collection<? extends GrantedAuthority> getAuthorities(Collection<Role> roles) {
        return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());
    }
}
Salin selepas log masuk
  1. 数据库模型
    还需要创建数据库表来存储用户信息。可以创建usersroles
  2. CREATE TABLE users (
        id BIGINT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        password VARCHAR(100) NOT NULL
    );
    
    CREATE TABLE roles (
        id BIGINT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL
    );
    
    CREATE TABLE user_roles (
        user_id BIGINT,
        role_id BIGINT,
        FOREIGN KEY (user_id) REFERENCES users(id),
        FOREIGN KEY (role_id) REFERENCES roles(id),
        PRIMARY KEY (user_id, role_id)
    );
    Salin selepas log masuk
    Pembekal pengesahan tersuai
  1. Seterusnya, anda perlu menyesuaikan kelas perkhidmatan butiran pengguna untuk memuatkan maklumat terperinci pengguna, seperti nama pengguna, kata laluan, peranan, dsb. Anda boleh melaksanakan kelas ini dengan melaksanakan antara muka UserDetailsService.
  2. @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Autowired
        private UserDetailsService userDetailsService;
        
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .antMatchers("/").permitAll()
                    .antMatchers("/admin/**").hasRole("ADMIN")
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .and()
                .logout()
                    .permitAll();
        }
        
        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
        }
        
        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }
    Salin selepas log masuk
      Model pangkalan data

      Anda juga perlu mencipta jadual pangkalan data untuk menyimpan maklumat pengguna. Dua jadual, pengguna dan role, boleh dibuat.

      @Configuration
      @EnableWebSecurity
      public class SecurityConfig extends WebSecurityConfigurerAdapter {
          @Override
          protected void configure(HttpSecurity http) throws Exception {
              http
                  .authorizeRequests()
                      .antMatchers("/admin/**").access("hasRole('ADMIN')")
                      .anyRequest().authenticated();
          }
      }
      Salin selepas log masuk
      1. Log Masuk Pengguna
        Konfigurasikan halaman log masuk sebagai halaman log masuk Spring Security.
      @RestController
      @RequestMapping("/api")
      public class ApiController {
          @PreAuthorize("hasRole('USER')")
          @GetMapping("/users")
          public List<User> getUsers() {
              // code here
          }
          
          @PreAuthorize("hasRole('ADMIN')")
          @PostMapping("/user")
          public User createUser(@RequestBody User user) {
              // code here
          }
      }
      Salin selepas log masuk
        3. Kebenaran
      1. Selepas pengesahan pengguna berjaya, anda boleh menggunakan Spring Security untuk pengurusan kebenaran.
      Fail konfigurasi

      boleh merealisasikan kawalan akses ke URL tertentu dengan mengkonfigurasi peraturan URL dan kebenaran akses.

      rrreee

      Keizinan Anotasi
        Anda boleh menggunakan kebenaran berasaskan anotasi untuk kebenaran.
      1. rrreee
      Kesimpulan: 🎜Menggunakan Spring Security, pengesahan pengguna dan pengurusan kebenaran boleh dicapai dengan mudah. Artikel ini memperkenalkan cara menggunakan rangka kerja Spring Security untuk mengkonfigurasi pembekal pengesahan dan kebenaran, mengesahkan pengguna dengan menyesuaikan kelas perkhidmatan dan model pangkalan data butiran pengguna serta mengurus kebenaran dengan mengkonfigurasi peraturan dan anotasi URL. Saya harap artikel ini akan membantu anda memahami dan menggunakan rangka kerja pengesahan dan kebenaran dalam Java. 🎜🎜Rujukan: 🎜🎜🎜Dokumentasi rasmi Spring Security: https://docs.spring.io/spring-security/site/docs/5.4.1/reference/html5/🎜🎜

      Atas ialah kandungan terperinci Bagaimana untuk menggunakan rangka kerja pengesahan dan kebenaran dalam Java untuk melaksanakan pengesahan pengguna dan pengurusan kebenaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:php.cn
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan