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

test

parent b28e6252
......@@ -54,6 +54,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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 -->
<dependency>
<groupId>org.springframework.data</groupId>
......
......@@ -19,8 +19,13 @@ public class PruleApplication implements CommandLineRunner {
this.appUserRepository = appUserRepository;
}
public void run(String... args) throws Exception{
AppUser userA = new AppUser("andrewli315", "prlab1234", "admin");
appUserRepository.save(userA);
//AppUser userA = new AppUser("andrewli315", "prlab1234", "admin");
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) {
......
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;
import io.prlab.prule.services.DatabaseUserDetailsService;
import org.springframework.context.annotation.Bean;
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.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
......@@ -12,14 +15,17 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public InMemoryUserDetailsManager userDetailsService (){
UserDetails user = User.builder()
.username("user")
.password(passwordEncoder().encode("password"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
private final DatabaseUserDetailsService userDetailsService;
public SecurityConfiguration(DatabaseUserDetailsService userDetailsService) {
this.userDetailsService = userDetailsService;
}
public void configureGlobal (AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(new BCryptPasswordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder (){
......
......@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
public class UserController {
@Autowired
public DatabaseUserDetailsService databaseUserDetailsService;
@Autowired
private final AppUserRepository repository;
public UserController(AppUserRepository repository) {
......
......@@ -13,12 +13,15 @@ public class AppUser {
@Column(nullable = false, updatable = false)
private Long id;
@Setter
@Getter
@Column(nullable = false, unique = true)
private String username;
@Setter
@Getter
@Column(nullable = false)
private String password;
@Setter
@Getter
@Column(nullable = false)
private String role;
......@@ -30,4 +33,13 @@ public class AppUser {
this.password = password;
this.role = role;
}
public String getPassword() {
return password;
}
public String getRole() {
return role;
}
}
......@@ -4,9 +4,9 @@ import io.prlab.prule.entity.AppUser;
import java.util.Optional;
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> {
Optional<AppUser> findByUsername (String username);
......
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 java.util.Optional;
@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.datasource.url=jdbc:h2:mem:testdb
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.path=/h2-console
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