implementation 'org.springframework.security:spring-security-crypto:5.7.1'
@Configuration
public class PasswordConfig {
//PasswordEncoder : 패스워드 암호화를 위해 제공되는 상위클래스
//PasswordEncoder객체를 만들어서 제공
@Bean
public PasswordEncoder passwordEncoder(){
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}

@Controller
@RequestMapping("/member")
@SessionAttributes("user")
@RequiredArgsConstructor
public class MemberController {
private final MemberService service;
private final DeptService deptservice;
private final FileUploadService fileuploadService;
private final PasswordEncoder passwordEncoder;
// 스프링에서 제공되는 기능을 이용해서 로그인 처리하기
@PostMapping("/spring/login")
public String springlogin(MemberDTO loginUserInfo, Model model) {
System.out.println("스프링이 제공하는 @SessionAttributes를 이용해서 로그인");
MemberDTO user = service.login(loginUserInfo);
System.out.println("------------로그인한 사용자정보:"+user);
String view = "";
/*
passwordEncoder.matches(loginUserInfo.getPass(), user.getPass())
---------------------- ---------------
로그인하며 사용자가 입력한 값 디비에서 조회한 사용자의 패스워드값
=> 로그인하며 사용자가 입력한 값을 암호화하고 디비에 저장된 값을 비교해서 일치하면 true 아니면 false
*/
if(user!=null & passwordEncoder.matches(loginUserInfo.getPass(), user.getPass())) {
System.out.println("패스워드 일치");
model.addAttribute("user",user);
view = "emp/mypage";//타임리프쓰니 서브메뉴로 로그인했을때 각 부서 정의해놓음
}else {
System.out.println("패스워드 불일치");
view = "redirect:/emp/login.do";
}
/*
암호화하기 전의 로그인
if(user!=null) {
//로그인성공
model.addAttribute("user",user);
view = "emp/mypage";//타임리프쓰니 서브메뉴로 로그인했을때 각 부서 정의해놓음
}else {
//로그인실패
view = "redirect:/emp/login.do";
}*/
return view;
}
@GetMapping("/insert")
public String insert(Model model) {
//기존의 DeptServiceImpl의 셀렉트메소드를 호출해서 결과를 공유
List<DeptDTO> deptlist = deptservice.select();
model.addAttribute("deptlist",deptlist);
return "emp/register";
}
@PostMapping("/insert")
public String insertPage(MemberDTO member, HttpSession session)
throws IllegalStateException, IOException{
//패스워드 암호화
String encodedPass = passwordEncoder.encode(member.getPass());
System.out.println("-----------"+encodedPass);
//암호화된 패스워드 세팅
member.setPass(encodedPass);
System.out.println(member);
//1. 파일업로드
MultipartFile file = member.getUserImage();
String path = WebUtils.getRealPath(session.getServletContext(), "/WEB-INF/upload");
String storeFilename = fileuploadService.uploadFile(file);
member.setProfile_photo(storeFilename);
member.setGender("0");
System.out.println(member);
//2.디비에 저장하기
service.insert(member);
return "emp/register";
}
}


암호화된 패스워드가 등록되니 패스워드 길이 변경

password자리에 암호화된 키 삽입됨
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.