application.properties
spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/[Nom de la base de données]
spring.datasource.username=[Nom d'utilisateur DB]
spring.datasource.password=[mot de passe]
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
create table USER_TABLE (
USER_ID VARCHAR2(30 char)
, FAMILY_NAME VARCHAR2(10 char) not null
, FIRST_NAME VARCHAR2(10 char) not null
, PASSWORD VARCHAR2(255) not null
, constraint USER_TABLE_PKC primary key (USER_ID)
) ;
Le mot de passe ci-dessous est un hachage de «pass». J'ai fait référence à cet article.
INSERT INTO
USER_TABLE
VALUES(
'0001'
,'tester'
,'Taro'
,'$2a$10$w0C4tFU.SLFATC1Y6Y4uy.vMYsLXhlfvgnFP4dLbRjEa6/Ag1csKS'
);
UserTable.java
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "USER_TABLE")
public class UserTable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID")
private String userId;
@Column(name = "FAMILY_NAME")
private String familyName;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "PASSWORD")
private String password;
// Getter,Setter omis
UserTableRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.azkz.entity.UserTable;
@Repository
public interface UserTableRepository extends JpaRepository<UserTable, String> {
public UserTable findByUserId(String userId);
}
DemoSecurityConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class DemoSecurityConfig extends WebSecurityConfigurerAdapter {
//Une méthode pour limiter l'URL accessible et spécifier la destination de la transition lorsque la connexion est réussie
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests()
.mvcMatchers("/").permitAll() // 「/Accessible à tous
.anyRequest().authenticated() //Sinon, vous devez vous connecter
.and()
.formLogin()
.defaultSuccessUrl("/success"); //Une fois la connexion réussie, "/Faire une demande Get pour "succès"
}
//Une méthode pour hacher le mot de passe entré à l'aide de la méthode BCrypt
@Bean
protected PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
DemoUserDetailsService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.azkz.entity.UserTable;
import com.azkz.repository.UserTableRepository;
@Service
public class DemoUserDetailsService implements UserDetailsService {
@Autowired
UserTableRepository userTableRepository;
@Override
public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException {
//Obtenir des données de la base de données en fonction de l'ID utilisateur saisi
UserTable userTable = userTableRepository.findByUserId(userId);
//Entrez les valeurs (ID utilisateur, mot de passe) et la classe DemoUserDetails instanciée
//La vérification de connexion est effectuée en comparant à l'intérieur de Spring Security.
return new DemoUserDetails(userTable);
}
}
DemoUserDetails.java
import java.util.Collections;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User;
import com.azkz.entity.UserTable;
public class DemoUserDetails extends User {
@Autowired
UserTable userTable;
public DemoUserDetails(UserTable userTable) {
// 「Collections.emptySet()Est à l'origine une collection de noms d'autorité. Cette fois, c'est vide.
super(userTable.getUserId(), userTable.getPassword(),Collections.emptySet());
this.userTable = userTable;
}
//Obtenez vos propres éléments à partir des informations de session
public String getFirstName() {
return this.userTable.getFirstName();
}
public String getFamilyName() {
return this.userTable.getFamilyName();
}
}
DemoController.java
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.azkz.security.DemoUserDetails;
@RestController
public class DemoController {
@GetMapping("/success")
public DemoUserDetails loginSuccess() {
//Obtenez des informations sur les utilisateurs connectés
DemoUserDetails demoUserDetails =
(DemoUserDetails) SecurityContextHolder
.getContext().getAuthentication().getPrincipal();
return demoUserDetails;
}
}
Recommended Posts