개인공부

[springboot] 회원가입

게르마늄팔찌전도사 2024. 5. 19. 14:40

프로젝트에서 일단 controller, entity, repository, Service 패키지를 사용한다.

나는 포트를 9000번 쓴다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# WAS Port
server.port = 9000
 
spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/XE
spring.datasource.username=c##user_name
spring.datasource.password=password
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
 
# JPA ??
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.OracleDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
logging.level.org.springframework.security=DEBUG
logging.level.org.springframework.web=DEBUG
 
 
#spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.cache=false
 
spring.web.resources.static-locations=classpath:/templates/
cs

 

page 경로를 templates 로 하지 않았더니 오류가 생겼었다. 경로를 넣지 않아 생기는 문제였다. 처음에는 thymeleaf를 이용하여 넣으려고 했으나 작동하지 않았고, 구글링을 통해 

spring.web.resources.static-locations=classpath:/templates/

를 넣으면 해결 되는 걸 알게 되었다. 사실 페이지가 동작하지 않은 경우가 많아서 DEBUG를 보기 위해 디버그 내용도 추가해주었다.

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
    @Autowired
    private CustomUserDetailsService customUserDetailsService;

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf(csrf -> csrf.disable())
                .authorizeHttpRequests(authz -> authz
                        .requestMatchers("/login", "/signup", "/members/**", "/css/**", "/js/**").permitAll()
                        .anyRequest().authenticated())
                .formLogin(form -> form
                        .loginPage("/login")
                        .loginProcessingUrl("/login") // 로그인 처리 URL
                        .defaultSuccessUrl("/home", true)
                        .permitAll())
                .logout(logout -> logout
                        .logoutSuccessUrl("/login")
                        .permitAll())
                .userDetailsService(customUserDetailsService); // UserDetailsService 추가

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

 

MemberController에서는 member을 추가하는 역할을 한다.

@Controller
@RequestMapping("/members")
public class MemberController {

    @Autowired
    private MemberService memberService;

    @PostMapping
    public String addMember(
            @RequestParam("id") String id,
            @RequestParam("username") String username,
            @RequestParam("password") String password,
            @RequestParam("gender") String gender,
            @RequestParam("phoneNumber") String phoneNumber,
            @RequestParam("age") int age,
            @RequestParam("userEmail") String userEmail,
            RedirectAttributes redirectAttributes) {

        Member member = new Member();
        member.setId(id);
        member.setUsername(username);
        member.setPassword(password);
        member.setGender(gender);
        member.setPhoneNumber(phoneNumber);
        member.setAge(age);
        member.setUserEmail(userEmail);

        memberService.saveMember(member);
        redirectAttributes.addFlashAttribute("message", "회원가입이 성공적으로 완료되었습니다.");
        return "redirect:/login";
    }
}

 

그리고 memberService 

@Service
public class MemberService {
    @Autowired
    private MemberRepository memberRepository;

    public Member saveMember(Member member) {
        // 비밀번호 암호화
        member.setPassword(new BCryptPasswordEncoder().encode(member.getPassword()));
        return memberRepository.save(member);
    }
}

 

비밀번호는 해쉬로 저장하기로 했다. 처음에는 그냥 PASSWORD를 넣으려고 했는데 아무래도 데이터베이스에 그냥 하드코드로 넣기엔 좀 문제가 될 것 같았다.

 

'개인공부' 카테고리의 다른 글

dlib library 설치  (0) 2024.05.21
Resnet18로 거북목 판정하기  (0) 2024.05.19
[SpringBoot] SpringBoot + Maven  (0) 2024.05.15
졸업 작품 주제  (0) 2024.05.09
[ORACLE] 새 계정 생성  (0) 2024.05.05