728x90
반응형

Spring-Security는 두 가지 기능 제공함 
1. 인증 authentication : 정말 이 사용자가 맞는가? 로그인해서 내가 그 사용자임을 증명

2. 권한 authorization : 이 사용자가 이것을 할 수 있는가? 내가 이 페이지를 조회할 권한이 있는가

 


인증 authentication

ex> 비밀번호 암호화
pom.xml에 dependency 추가하고 key값을 위쪽의 properties에 아래 코드 추가해주기

<org.springframework.security-version>5.1.5.RELEASE</org.springframework.security-version>

전역(appication-context.xml)에 설정하여 사용하도록 하기 

>#2부분에 param-value추가 : /WEB-INF/spring/security-context.xml

 


spring 설정 파일 만들기

WEB-INF\spring > New > spring 검색 > Spring Bean Configuration File 생성 > security-context.

.xml 입력 후 Next
> beans는 선택안해도 기본적으로 선택되기 때문에 선택할 필요 X, security 체크, XSD에 4.2.xsd 체크
> 프로젝트 체크 후 Finish

 


암호화 처리 BCryptPasswordEncoder 등록
security-context.xml에서 암호화 처리 bean등록
이렇게 하면 application-context에 bcrypt가 등록됐고 이걸 servlet-context에서 @Autowired해서 사용할 것임(컨트롤러에서 작성)
bcrypt는 그때그때 달라지는 randomsalt값을 이용해서 암호화 처리(이미지 참고)
$2a$10$m80eeYRHroni3ZGniz6gJ.XM8rho0zzKmtkMhAigBwAwFPc8hnjjO
- 알고리즘 : $2a$
- 옵션값( 비용(속도/메모리) 설정 ) : 10$
- 랜덤솔트값(22자리) : m80eeYRHroni3ZGniz6gJ.
- 해시값(31자리) : XM8rho0zzKmtkMhAigBwAwFPc8hnjjO

 


권한 authorization

mybatis-config.xml에서 typeAlias지정 방법

<package name="com.kh.spring" />

이렇게 해놓으면 spring이하의 모든 클래스를 자동으로 별칭 지정(첫 글자 대문자->소문자로)

 

 

Model은 기본적으로 jsp에서 사용하기 위한 것이기 때문에 기본값이 requestScope임 
그래서 단발적으로 끝남 -> sessionScope에 담으려면 controller 클래스 레벨에
>@SessionAttributes(value={"loginMember"}) 이렇게 지정하면 -> key값이 loginMember이면 session에 담아줌

 

 

SessionAttributes를 통해서 로그인 멤버를 담았기 때문에 로그아웃 시에 그에 상응하는 세션 무효화 처리를 해줘야함

세션 무효화 처리하는 법

logout 메소드 인자에 SessionStatus를 받고  > 아래의 내용 선언

if(sessionStatus.isComplete()==false) sessionStatus.isComplete();

 


회원 탈퇴시

//탈퇴
@RequestMapping("/deleteMember.do")
public String deleteMember (@RequestParam("memberEmail") String memberEmail,
							RedirectAttributes redirectAttr, 
                            SessionStatus sessionStatus) {
                            
	int result = memberService.deleteMember(memberEmail);

	if(result>0) {
		redirectAttr.addFlashAttribute("msg", "성공적으로 회원정보를 삭제했습니다.");
		SecurityContextHolder.clearContext();
	}
	else 
		redirectAttr.addFlashAttribute("msg", "회원정보삭제에 실패했습니다.");

	return "redirect:/";
}

SecurityContextHolder.clearContext();

이 부분을 꼭 따로 추가해 줘야 스프링 시큐리티 탈퇴 시 로그아웃 처리가 됨!!!

반응형
복사했습니다!