


How to use the authentication and authorization framework in Java to implement user authentication and permission management?
How to use the authentication and authorization framework in Java to implement user authentication and permission management?
Introduction:
In most applications, user authentication and permission management are very important functions. There are many authentication and authorization frameworks in Java available to developers, such as Spring Security, Shiro, etc. This article will focus on how to use the Spring Security framework to implement user authentication and permission management.
1. Introduction to Spring Security
Spring Security is a powerful security framework. It is a plug-in based on the Spring framework and can be used to add authentication and authorization functions. Spring Security provides many functions, such as user authentication, role management, permission management, etc.
2. Authentication
Authentication is the process of verifying user identity. In Spring Security, user authentication can be achieved by configuring an authentication provider.
- Configuration file
First, you need to configure the authentication provider in the Spring configuration file. Authentication providers can be defined using the<authentication-manager>
element.
<authentication-manager> <authentication-provider user-service-ref="userDetailsService"/> </authentication-manager>
- Custom authentication provider
Next, you need to customize a user details service class to load the user's detailed information, such as user name, password, role, etc. You can implement theUserDetailsService
interface to implement this class.
@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()); } }
- Database Model
You also need to create database tables to store user information. Two tables,users
androles
, can be created.
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) );
- User login
Configure the login page as the Spring Security login page.
@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(); } }
3. Authorization
After successful user authentication, you can use Spring Security for permission management.
- Configuration file
You can implement access control to specific URLs by configuring URL rules and access permissions.
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").access("hasRole('ADMIN')") .anyRequest().authenticated(); } }
- Annotation authorization
Annotation-based authorization can be used.
@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 } }
Conclusion:
Using Spring Security, user authentication and permission management can be easily achieved. This article introduces how to use the Spring Security framework to configure authentication and authorization providers, authenticate users by customizing user details service classes and database models, and manage permissions by configuring URL rules and annotations. I hope this article will help you understand and use the authentication and authorization framework in Java.
Reference:
- Spring Security official documentation: https://docs.spring.io/spring-security/site/docs/5.4.1/reference/html5/
The above is the detailed content of How to use the authentication and authorization framework in Java to implement user authentication and permission management?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.
