After enabling the Spring Security, we need to access the username and password from the database.
Step 1: install the dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
Step 2: codes
WebSecurityConfig.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public MyUserDetailsService userDetailsService() {
return new MyUserDetailsService();
};
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder(11);
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
authProvider.setUserDetailsService(userDetailsService());
authProvider.setPasswordEncoder(encoder());
return authProvider;
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService())
.passwordEncoder(encoder())
.and()
.authenticationProvider(authenticationProvider());
}
}
User.java
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "users")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, unique = true)
private String username;
private String password;
private boolean accountNonExpired;
private boolean accountNonLocked;
private boolean credentialsNonExpired;
private boolean enabled;
public User(String username, String password) {
this.username = username;
this.password = password;
this.accountNonExpired = true;
this.accountNonLocked = true;
this.credentialsNonExpired = true;
this.enabled = true;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
@Override
public String getPassword() {
return this.password;
}
@Override
public String getUsername() {
return this.username;
}
@Override
public boolean isAccountNonExpired() {
System.out.println("shark-isAccountNonExpired-" + this.username);
if (this.username.equals("application-user")) {
return true;
} else {
return false;
}
}
@Override
public boolean isAccountNonLocked() {
System.out.println("shark-isAccountNonLocked-" + this.username);
if (this.username.equals("application-user")) {
return true;
} else {
return false;
}
}
@Override
public boolean isCredentialsNonExpired() {
if (this.username.equals("application-user")) {
return true;
} else {
return false;
}
}
@Override
public boolean isEnabled() {
if (this.username.equals("application-user")) {
return true;
} else {
return false;
}
}
}
UserRepository.java
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
MyUserDetailsService.java
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException(username);
}
return user;
}
}
DemoCommandLine.java
@Component
class DemoCommandLine implements CommandLineRunner {
@Autowired
private UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public void run(String... args) throws Exception {
User user = new User();
user.setUsername("good-user");
user.setPassword(passwordEncoder.encode("good-pass"));
userRepository.save(user);
}
}
The new user will be stored in MySql