Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

KSI일기장

spring 로그인, 로그아웃, 로그인 실패시 메세지 본문

Spring

spring 로그인, 로그아웃, 로그인 실패시 메세지

MyDiaryYo 2023. 4. 25. 21:20

*login

//MemberController

@Controller	//생성된 bean이 Controller임을 명시 + bean 등록
@RequestMapping("/member")	//localhost:8080/comm/member 이하의 요청을 처리하는 컨트롤러
@SessionAttributes({"loginMember"}) //Model에 추가된값이 key와 어노테이션에 작성된 값이 같으면
									//해당값을 session scope로 이동시키는 역할을 한다
public class MemberController {
	private Logger logger = LoggerFactory.getLogger(MemberController.class);

	@Autowired
	private MemberService service;
	//Controller :요청/응답을 제어하는 역할을 하는 클래스
//요청시 파라미터 얻어오는 방법3
	//->@ModelAttribute 어노테이션 사용

	//@ModelAttribute를 매개변수에 작성하는 경우 사용법
	//-> @ModelAttrinbute VO타입 변수명 (index.jsp 로그인영역 input name값과 VO변수명 일치해야 한다)

	@PostMapping("/login")
	public String login(@ModelAttribute Member inputMember, Model model,
						RedirectAttributes ra, HttpServletResponse resp, HttpServletRequest req,
						@RequestParam(value="saveId", required=false) String saveId) {
						//required=false -> true면 아이디 저장 무조건 체크되있어야하고, false면 체크 안되있어도 무관
		logger.info("로그인 기능 수행됨");

		//아이디, 비밀번호가 일치하는 회원정보를 조회하는 service 호출 후 결과 반환 받기
		Member loginMember = service.login(inputMember);

		/*Model :데이터를 맵 형식(k:v) 형태로 담아 전달하는 용도의 객체
		 * ->request, session을 대체하는 객체
		 * -기본 scope: request
		 * -session Scope로 변환하고 싶은 경우
		 * 클래스 레벨로 @SessionAttribute를 작성하면 된다(맨위 추가)
		 */
		
		model.addAttribute("loginMember", loginMember);
	
		return "redirect:/";
	}

//member-mapper.xml

 








 

*logout

 

//MemberController

//로그아웃
	@GetMapping("/logout")
	public String logout(SessionStatus status) {
		//로그인 할대 쓰인 @SessionAttributes를 이용해 session scope에 배치된 데이터는
		//@SessionStatus라는 별도 객체를 이용해야만 없앨 수 있다

		logger.info("로그아웃 기능 수행됨");

		status.setComplete();	//세션이 할일 완료 -> 세션 없앤다

		return "redirect:/";

	}

 

*로그인 실패시 메세지

-index.jsp

index.jsp 내용 잘라서 main.jsp 만들고 붙여넣기

//footer.jsp

 

//MainController

package edu.kh.comm.main.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//로그인 정보 불일치시 메세지 띄우기
@Controller
public class MainController {

	/*index.jsp(http://localhost:8080/comm/main) 에서 요청보냄
	 * ->@RequestMapping에 /main 만 작성
	 */
	@RequestMapping("/main")
	public String mainForward() {

		return "common/main";
		//-> WEB-INF / views / common / main.jsp

		//controller -> return 구문 받아 dispatcher
		//-> ViewReserve -> servlet-context.xml (prefix, suffix)로 인해
		//common/main만 적어줘도 된다
	}

}

//MemberController

//요청시 파라미터 얻어오는 방법3
	//->@ModelAttribute 어노테이션 사용

	//@ModelAttribute를 매개변수에 작성하는 경우 사용법
	//-> @ModelAttrinbute VO타입 변수명 (index.jsp 로그인영역 input name값과 VO변수명 일치해야 한다)

	@PostMapping("/login")
	public String login(@ModelAttribute Member inputMember, Model model,
						RedirectAttributes ra) {
		logger.info("로그인 기능 수행됨");

		//아이디, 비밀번호가 일치하는 회원정보를 조회하는 service 호출 후 결과 반환 받기
		Member loginMember = service.login(inputMember);

		/*Model :데이터를 맵 형식(k:v) 형태로 담아 전달하는 용도의 객체
		 * ->request, session을 대체하는 객체
		 * -기본 scope: request
		 * -session Scope로 변환하고 싶은 경우
		 * 클래스 레벨로 @SessionAttribute를 작성하면 된다(맨위 추가)
		 */

		if(loginMember != null) {	//로그인 성공
			model.addAttribute("loginMember", loginMember);
		}else {
			ra.addFlashAttribute("message", "아이디 또는 비밀번호가 일치하지 않습니다");
		}
		return "redirect:/";

	}