반응형
암호화 작업을 하기 위하여 스프링 시큐리티를 사용하였다.
1. build.gradle에 추가
//build.gradle
//spring security
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
2. util
@EnableWebSecurity
@AllArgsConstructor
@Configuration
public class SpringSecurity{
/**
* 패스워드 암호화
* */
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.cors().disable()
.csrf().disable()
.formLogin().disable() //기본 로그인 페이지 없애기
.headers().frameOptions().disable();
return http.build();
}
}
3. controller
//login
@Controller
@RequestMapping("/login")
public class LoginController {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
private final LoginService loginService;
public LoginController(LoginService loginService) {
this.loginService = loginService;
}
@GetMapping
public String moveLogin(){
return "login/login";
}
@PostMapping
public String checkLogin(@RequestParam Map<String, Object> param) {
Map<String, Object> checkLogin = loginService.checkLogin(param);
boolean isMatch = passwordEncoder.matches((String)param.get("memberPw"), (String)checkLogin.get("MEMBER_PW"));
if (isMatch) return "redirect:/";
else return "redirect:/login";
}
}
//join
@Controller
@RequestMapping("/join")
public class JoinController {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
private final JoinService joinService;
public JoinController(JoinService joinService) {
this.joinService = joinService;
}
@GetMapping
public String moveJoin(){
return "join/join";
}
@PostMapping
public String joinMember(@RequestParam Map<String, Object> param){
param.put("memberPw", passwordEncoder.encode(param.get("memberPw").toString()));
joinService.joinMember(param);
return "redirect:/";
}
}
회원가입시 암호화 처리하여 저장하고, 로그인 할때 암호화된 데이터를 가지고 입력한 값과 비교한다.
반응형