반응형
인코딩 적용
src/main/webapp/WEB-INF/web.xml에 아래의 코드를 추가합니다.
<!-- 인코딩 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 모든 url에 적용 -->
</filter-mapping>
스프링의 <filter>을 이용하여 Filter 클래스를 따로 만들 필요 없이 해당 코드로 인코딩을 적용할 수 있습니다.
비밀번호 암호화
스프링이 사용하는 보안이 뛰어난 방식은 BCrypt 암호화 방식이며, 해당 방식은 복호화가 불가능합니다.
1-1. 파일 생성
src/main/webapp/WEB-INF/spring 우클릭 → Spring Bean Definition file 생성
파일 명 : spring-security
Next 클릭
namespace 중에 security가 보이지 않기 때문에 pom.xml에 라이브러리를 추가해줍니다.
<!-- spring security 모듈 추가 : spring security core, spring security web,
spring security config -->
<!-- 각 버젼은 스프링프레임워크 버젼과 동일하게 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${org.springframework-version}</version>
</dependency>
라이브러리 추가 후 sercurity 체크하고 Finish를 클릭합니다.
1-2. 암호화와 관련된 빈(bean) 생성
해당 코드는 스프링 다큐먼트에 다 나와 있으니 꼭 참조하시길 바랍니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security-5.7.xsd">
<!-- 암호화와 관련된 bean생성 -->
<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
</beans>
1-3. MemberController.java에 의존성 주입하기
@Autowired
private BCryptPasswordEncoder bcrypt;
1-4. web.xml에 spring-security.xml 등록해주기
Root Spring Container가 참고하고 시작해야 할 것들은 <context-param> 태그 안에 넣어 관리합니다.
따라서 만들어 준 spring-security.xml도 스프링 컨테이너가 등록하고 진행할 수 있도록 <context-param> 안에 넣어 줍니다.
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/spring-security.xml
</param-value>
</context-param>
2. MemberController.java
이제 암호화를 위한 세팅이 끝났으니 암호화를 진행해보도록 하겠습니다.
2-1. 회원가입 메서드 필드에 bcrypt 삽입
String encPwd = bcrypt.encode(member.getPwd());
2-2. 원래 비밀번호 받아와 암호화 하기
같은 암호지만 암호화가 매번 다르게 랜덤으로 생성되기 때문에 console에 찍어봅니다.
String encPwd = bcrypt.encode(member.getPwd());
System.out.println(encPwd);
2-3. 암호화된 데이터 다시 객체에 넣어주기
/* 비밀번호 암호화 */
// BCrypt
// 원본 데이터 -> salting, salt값 -> 암호화 데이터
// (random)
// System.out.println(bcrypt);
String encPwd = bcrypt.encode(member.getPwd());
member.setPwd(encPwd);
System.out.println(encPwd);
2-4. 완성된 회원 가입
// 회원가입
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String joinPOST(MemberVO member) throws Exception {
logger.info("join 진입");
/* 비밀번호 암호화 */
// BCrypt
// 원본 데이터 -> salting, salt값 -> 암호화 데이터
// (random)
// System.out.println(bcrypt);
String encPwd = bcrypt.encode(member.getPwd());
member.setPwd(encPwd);
System.out.println(encPwd);
// 회원가입 서비스 실행
memberService.insertMember(member);
logger.info("join Service 성공");
return "redirect:/member/login";
}
반응형
'😎 STS3 Spring 쇼핑몰' 카테고리의 다른 글
STS3 쇼핑몰 프로젝트[10] 로그아웃 (0) | 2022.08.02 |
---|---|
STS3 쇼핑몰 프로젝트[9] 공용 에러 페이지 등록 및 비밀번호 암호화(2) (0) | 2022.08.01 |
STS3 쇼핑몰 프로젝트[8] 로그인 기능 구현(페이지 데이터 처리) (0) | 2022.08.01 |
STS3 쇼핑몰 프로젝트[8] 로그인 기능 구현(페이지, 메서드) (0) | 2022.08.01 |
STS3 쇼핑몰 프로젝트[8] 로그인 기능 구현(mapper, service) (0) | 2022.08.01 |