Commit 17484f5e authored by Wen Wei Li's avatar Wen Wei Li

test

parent b28e6252
...@@ -54,6 +54,10 @@ ...@@ -54,6 +54,10 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-commons --> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-commons -->
<dependency> <dependency>
<groupId>org.springframework.data</groupId> <groupId>org.springframework.data</groupId>
......
...@@ -19,8 +19,13 @@ public class PruleApplication implements CommandLineRunner { ...@@ -19,8 +19,13 @@ public class PruleApplication implements CommandLineRunner {
this.appUserRepository = appUserRepository; this.appUserRepository = appUserRepository;
} }
public void run(String... args) throws Exception{ public void run(String... args) throws Exception{
AppUser userA = new AppUser("andrewli315", "prlab1234", "admin"); //AppUser userA = new AppUser("andrewli315", "prlab1234", "admin");
appUserRepository.save(userA); appUserRepository.save(new AppUser("user",
"$2a$10$NVM0n8ElaRgg7zWO1CxUdei7vWoPg91Lz2aYavh9.f9q0e4bRadue","USER"));
// Username: admin, password: admin
appUserRepository.save(new AppUser("admin",
"$2a$10$8cjz47bjbR4Mn8GMg9IZx.vyjhLXR/SKKMSZ9.mP9vpMu0ssKi8GW", "ADMIN"));
//appUserRepository.save(userA);
} }
public static void main(String[] args) { public static void main(String[] args) {
......
package io.prlab.prule.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenApiConfig {
@Bean
public OpenAPI AppUserOpenAPI(){
return new OpenAPI()
.info(new Info()
.title("PRLAB REST API")
.description("App User")
.version("1.0"));
}
}
package io.prlab.prule.config; package io.prlab.prule.config;
import io.prlab.prule.services.DatabaseUserDetailsService;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.
authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
...@@ -12,14 +15,17 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager; ...@@ -12,14 +15,17 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration @Configuration
@EnableWebSecurity @EnableWebSecurity
public class SecurityConfiguration { public class SecurityConfiguration {
@Bean private final DatabaseUserDetailsService userDetailsService;
public InMemoryUserDetailsManager userDetailsService (){
UserDetails user = User.builder() public SecurityConfiguration(DatabaseUserDetailsService userDetailsService) {
.username("user") this.userDetailsService = userDetailsService;
.password(passwordEncoder().encode("password")) }
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user); public void configureGlobal (AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(new BCryptPasswordEncoder());
} }
@Bean @Bean
public PasswordEncoder passwordEncoder (){ public PasswordEncoder passwordEncoder (){
......
...@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
public class UserController { public class UserController {
@Autowired @Autowired
public DatabaseUserDetailsService databaseUserDetailsService; public DatabaseUserDetailsService databaseUserDetailsService;
@Autowired
private final AppUserRepository repository; private final AppUserRepository repository;
public UserController(AppUserRepository repository) { public UserController(AppUserRepository repository) {
......
...@@ -13,12 +13,15 @@ public class AppUser { ...@@ -13,12 +13,15 @@ public class AppUser {
@Column(nullable = false, updatable = false) @Column(nullable = false, updatable = false)
private Long id; private Long id;
@Setter @Setter
@Getter
@Column(nullable = false, unique = true) @Column(nullable = false, unique = true)
private String username; private String username;
@Setter @Setter
@Getter
@Column(nullable = false) @Column(nullable = false)
private String password; private String password;
@Setter @Setter
@Getter
@Column(nullable = false) @Column(nullable = false)
private String role; private String role;
...@@ -30,4 +33,13 @@ public class AppUser { ...@@ -30,4 +33,13 @@ public class AppUser {
this.password = password; this.password = password;
this.role = role; this.role = role;
} }
public String getPassword() {
return password;
}
public String getRole() {
return role;
}
} }
...@@ -4,9 +4,9 @@ import io.prlab.prule.entity.AppUser; ...@@ -4,9 +4,9 @@ import io.prlab.prule.entity.AppUser;
import java.util.Optional; import java.util.Optional;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository; import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@Repository @RepositoryRestResource
public interface AppUserRepository extends CrudRepository<AppUser, Long> { public interface AppUserRepository extends CrudRepository<AppUser, Long> {
Optional<AppUser> findByUsername (String username); Optional<AppUser> findByUsername (String username);
......
package io.prlab.prule.services; package io.prlab.prule.services;
import io.prlab.prule.entity.AppUser;
import io.prlab.prule.repositories.AppUserRepository;
import org.springframework.security.core.userdetails.User.UserBuilder;
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 org.springframework.stereotype.Service;
import java.util.Optional;
@Service @Service
public class DatabaseUserDetailsService { public class DatabaseUserDetailsService implements UserDetailsService {
private final AppUserRepository repository;
public DatabaseUserDetailsService(AppUserRepository repo){
this.repository = repo;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Optional<AppUser> user = repository.findByUsername(username);
UserBuilder builder = null;
if (user.isPresent()) {
AppUser currentUser = user.get();
builder = org.springframework.security.core.userdetails.
User.withUsername(username);
builder.password(currentUser.getPassword());
builder.roles(currentUser.getRole());
} else {
throw new UsernameNotFoundException("User not found.");
}
return builder.build();
}
} }
spring.application.name=prule spring.application.name=prule
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.show-sql=true spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.h2.console.enabled=true spring.h2.console.enabled=true
spring.h2.console.path=/h2-console spring.h2.console.path=/h2-console
springdoc.api-docs.path=/api-docs springdoc.api-docs.path=/api-docs
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment