■ 배운것
- 로그인
@SessionAttributes과 ModelAndView 객체 사용
- 회원가입
1. 회원가입 jsp 삽입
1) jsp 파일 템플릿 수정
2) jsp URL 설정
3) 컨트롤러 핸들러(메소드) 추가
4) 제이쿼리 라이브러리 추가(웹엡 밑 리소스에)
5) jsp의 name 속성 체크
6) 로그인 jsp에서 회원가입 화면으로 넘어갈 수 있는 버튼 만들기
2. 회원가입 컨트롤러 핸들러 생성(get, post)
3. 회원가입 서비스에 sava메소드 생성
4. 트랜젝션 설정
1) mybatis-context.xml에 트랜잭션 매니저를 빈으로 등록하기
2) @Transactional 어노테이션 사용하기 위해 servlet-context.xml에 요소등록
- 비밀번호 암호화하기
1. Spring Security 라이브러리 추가
2. 서비스에서 BCryptPasswordEncoder 가져오기
■ 로그인
@SessionAttributes과 ModelAndView 객체 사용
@SessionAttributes("키값")
- ModelAndView의 model 객체는 request Scope라서 redirect하면 객체가 유지되지 않는다.
⇒ SessionStatus 어노테이션 붙여서 model 객체 Session Scope까지로 확장시켜준다.
ModelAndView
- 리턴타입 ModelAndView, 매개변수 ModelAndView 넣음
- model.addObjec : 데이터 넣기
- model.setViewName : 포워딩 하는 뷰 지정
* 컨트롤러 로그인, 로그아웃 메소드 작성 => 로그인 잘 되나 체크
■ 회원가입
1. 회원가입 jsp 삽입
1) jsp 파일 템플릿 수정
- JSTL 태그 삽입




2) jsp URL 설정
3) 컨트롤러 핸들러(메소드) 추가
4) 제이쿼리 라이브러리 추가(웹엡 밑 리소스에)
- jsp에서 스크립트 $ 사용하기 위해서 추가함
- jsp 화면에서 헤드 안에 제이쿼리 가져올 수 있게 스크립트 태그 추가
- 서블릿컨테스트에 리소스 태그 만들어서 js 밑 애들 바로 가져올 수 있게 설정하기
→ 제이쿼리는 웹서버에서 바로 내려줘서 디스페쳐서블릿 안타서 서블릿컨텍스트에서 설정해놓은거 먹혀서
되는거임
5) jsp의 name 속성 체크
- 요청파라미터의 name 속성이랑 객체의 필드명과 동일해야 한다.
6) 로그인 jsp에서 회원가입 화면으로 넘어갈 수 있는 버튼 만들기
* 화면 잘 가지고 오나 체크
2. 회원가입 컨트롤러 핸들러 생성(get, post)
1) GetMapping 메소드 생성
- get 요청 메소드만 만들고
해당 url로 post 요청보내면(jsp에서 보낼 때 URL에 안보이게 form태크 Post로 설정함 ) 처리할 수 없어서 405 에러 나옴
따라서 post 요청 핸들러 만들어야함
- 회원가입 버튼 클릭 시 제이쿼리에서 location은 URL 주소창 통해서 이동하는거라서 GET요청을 하게 되는 것이다.
2) PostMapping 메소드 생성
- post 요청 핸들러 생성
- @ModelAttribute 어노테이션을 통해서 전송받기
- 요청 파라미터가 많은 경우 객체 타입으로 파라미터를 넘겨받는 방법이다.
- 단, 기본 생성자와 Setter가 존재해야 한다.
- @ModelAttribute 어노테이션을 생략해도 객체로 매핑된다
- 요청파라미터의 name 속성이랑 객체의 필드명과 동일해야 한다.
* 로그 찍어서 잘나오나 확인해보자
3. 회원가입 서비스에 sava메소드 생성
- 일단 리턴 0으로 만들어서 회원가입정보 가입 눌럿을때 실패창 뜨는지 확인
그 다음 리턴 1로 해서 홈페이지로 잘 넘어오는지 확인(컨트롤러에서 홈으로 리다이렉트 설정해놓음)
- 서비스.save메소드 구현, mapper 메소드 구현
insert 먼저 구현한 후 잘 들어가나 확인하기
4. 트랜젝션 설정
- 커밋롤백 처리하기 위해서 트랜젝션 설정한다.
- @Transactional : 클래스와 메소드에 붙일 수 있다. 클래스 위에 붙이면 클래스 안의 전체 메소드에 적용된다.
- 서비스 메소드 구현 시 트랜젝션 사용할 애들은 어노테이션 붙여서 사용
1) mybatis-context.xml에 트랜잭션 매니저를 빈으로 등록하기
2) @Transactional 어노테이션 사용하기 위해 servlet-context.xml에 요소등록
- servlet-context.xml 네임스페이스 변경 (xmlns:tx, xsi:schemaLocation 수정)
- tx 어노테이션 드리븐 설정
(프록시 타켓 클래스 : 인터페이스로 프록시 구현하지 말고 impl로 프록시 만들어라)
- DB 관련 설정은 공통으로 사용하기 때문에 root-context.xml에 작성했지만,
요소는 실제 트랜잭션을 적용할 빈들이 등록되어 있는 ApplicationContext 설정 파일에 작성해야 한다.
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

* 회원가입정보 예외 던져줬을 때 디비에 안들어가있는지 확인
■ 비밀번호 암호화하기
1. Spring Security 라이브러리 추가
1) spring-security-core, spring-security-web, spring-security-config 라이브러리 추가
- 라이브러리 버전 pom파일 상단 properties 안에 프로퍼티로 등록해서 버전 관리하기
2) security-context.xml 빈 파일로 만들기(c랑 p 체크하고)
- 암호화 위한 BCryptPasswordEncoder 빈 등록
3) root-context에 security-context.xml import하는 구문 추가
2. 서비스에서 BCryptPasswordEncoder 가져오기
- 메소드 작성
* 암호화된 비밀번호로 로그인 잘 되는지 확인하기
댓글