application.properties
spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/[Name der Datenbank]
spring.datasource.username=[DB-Benutzername]
spring.datasource.password=[Passwort]
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)
) ;
Das Passwort unten ist ein Hash von "pass". Ich habe auf [diesen Artikel] verwiesen (https://qiita.com/NagaokaKenichi/items/2742749a93df15b55d24).
INSERT INTO
USER_TABLE
VALUES(
'0001'
,'Prüfung'
,'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 weggelassen
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 {
//Eine Methode zum Einschränken der zugänglichen URL und zum Angeben des Übergangsziels bei erfolgreicher Anmeldung
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests()
.mvcMatchers("/").permitAll() // 「/Kann von jedem abgerufen werden
.anyRequest().authenticated() //Andernfalls müssen Sie sich anmelden
.and()
.formLogin()
.defaultSuccessUrl("/success"); //Wenn die Anmeldung erfolgreich ist, "/Stellen Sie eine Get-Anfrage zum "Erfolg"
}
//Eine Methode zum Hashing des eingegebenen Kennworts mithilfe der BCrypt-Methode
@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 {
//Abrufen von Daten aus der Datenbank basierend auf der eingegebenen Benutzer-ID
UserTable userTable = userTableRepository.findByUserId(userId);
//Geben Sie Werte (Benutzer-ID, Kennwort) und instanziierte DemoUserDetails-Klasse ein
//Die Anmeldeprüfung erfolgt durch Vergleichen in 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()Ist ursprünglich eine Sammlung von Autoritätsnamen. Diesmal ist es leer.
super(userTable.getUserId(), userTable.getPassword(),Collections.emptySet());
this.userTable = userTable;
}
//Holen Sie sich Ihre eigenen Elemente aus Sitzungsinformationen
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() {
//Erhalten Sie angemeldete Benutzerinformationen
DemoUserDetails demoUserDetails =
(DemoUserDetails) SecurityContextHolder
.getContext().getAuthentication().getPrincipal();
return demoUserDetails;
}
}
Recommended Posts