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();
이 부분을 꼭 따로 추가해 줘야 스프링 시큐리티 탈퇴 시 로그아웃 처리가 됨!!!
'프로그래밍 > Spring' 카테고리의 다른 글
10.21(query & resultset logging) (0) | 2020.10.21 |
---|---|
10.20(Model, log4j, Handler Interceptor) (0) | 2020.10.20 |
10.16( lombok, redirect 메시지 잘 안뜨는 경우 ) (0) | 2020.10.16 |
10.15(서버코드 수정 후 톰캣 재기동 없이 반영하기) (0) | 2020.10.15 |
10.14(handler method, typeHandler, typeAliases, Model, 스프링 msg) (0) | 2020.10.14 |