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?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBasal
2023-08-02 11:49:192019semak imbas

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 52b82e06fe430ab7919c3a04d90647be. 52b82e06fe430ab7919c3a04d90647be元素来定义认证提供程序。
<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService"/>
</authentication-manager>
  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());
    }
}
  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)
    );
    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();
        }
    }
      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();
          }
      }
      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
          }
      }
        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!

    Kenyataan:
    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