- 아래의 태그에 대하여 설명하시오.
- <sec:authorize access="isAnonymous()">
- <sec:authorize access="isAuthenticated()">
- <sec:authorize access="hasRole('ROLE_USER')">
- <sec:authentication property="principal.email"/>
- 스프링 시큐리티에서 로그인 정보를 저장하는 세션객체에 대하여
설명하시오.- 컨트롤러 단에서 로그인 정보를 가져오는 3가지 방법은?
- 스프링 시큐리티 에서 암호화객체의 종류는?
- 암호화 hash 방식이란?
- 아래를 트라이 해보시오
- 아래의 패스워드 모듈을 프로젝트에 적용한후 - 로그인시 아이디는 emp의 ename 을 넣고 패스워드는 emp의 사원번호를 넣어 로그인이 되도록 해보시오.package edu.sejong.ex.security; import org.springframework.security.crypto.password.PasswordEncoder; import lombok.extern.slf4j.Slf4j; @Slf4j public class CustomNoOpPasswordEncoder implements PasswordEncoder { @Override public String encode(CharSequence rawPassword) { log.warn("before encode: " + rawPassword); return rawPassword.toString(); } @Override public boolean matches(CharSequence rawPassword, String encodedPassword) { log.warn("matches: " + rawPassword + " : " + encodedPassword); return rawPassword.toString().equals(encodedPassword); } }
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

해당 정보 처리를 위해, 처리하는 함수의 매개변수로 다음 객체를 포함해야 한다.
1. Principal principal 객체를 갖고 오기
if(principal != null) {
System.out.println("타입 정보 : " + principal.getClass());
System.out.println("ID 정보 : " + principal.getName());
}
if(authentication != null) {
System.out.println("타입 정보 : " + authentication.getClass());
UserDetails user = (UserDetails) authentication.getPrincipal();
System.out.println("아이디 : " + user.getUsername());
System.out.println("패스워드 : " + user.getPassword());
System.out.println("권한들 : " + user.getAuthorities());
}
UserDetails user = (UserDetails)SecurityContextHolder.getContext()
.getAuthentication()
.getPrincipal();
if(user != null) {
System.out.println("아이디 : " + user.getUsername());
System.out.println("패스워드 : " + user.getPassword());
System.out.println("권한들 : " + user.getAuthorities());
}
PasswordEncoder 인터페이스를 구현한 클래스로
등이 있다.
해시(Hashing)
- 해시는 임의의 길이의 데이터를 고정된 길이의 값으로 변환하는 과정.
-> 이렇게 변환된 값은 해시 값 또는 해시 코드라고 함.
- 동일한 입력값은 항상 동일한 해시 값을 생성하며, 해시 함수는 입력값에 대해 일관된 결과를 제공.
- 해시 함수는 일방향 함수이므로, 해시 값을 통해 원본 데이터를 역으로 복원할 수 없음.
- 대표적인 해시 함수로는 SHA-256, MD5, SHA-1 등이 있음.
- 해시는 데이터의 무결성을 확인하거나 비밀번호의 안전한 저장을 위해 사용.
Spring Security 암호화 객체는 일반적으로 해시 함수를 기반. 즉, 해시 모듈이라고 보면 된다.
- 단방향 암호화 모듈.
WebSecurityConfigurerAdapter를 구현한 클래스 내 파일 수정 내용
@Bean
public PasswordEncoder passwordEncoder() {
//return new BCryptPasswordEncoder();
return new CustomNoOpPasswordEncoder();
}
UserDetails를 구현한 클래스 내 파일 추가 내용
public UserDetailsVO(EmpVO empVO) {
log.info("===");
log.info("UserDetailsVO로 들어온 EmpVO : " + empVO);
log.info("===");
this.setUsername(empVO.getEname());
this.setPassword(String.valueOf((empVO.getEmpNo())));
this.setAuthorities("ROLE_USER");
}
private void setAuthorities(String authority) {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority(authority));
this.authorities = authorities;
}
