(Spring Security)란??
자바 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임 워크 !!!
데이터베이스 암호화 방식 vs 스프링 시큐리티
데이터베이스에서 제공하는 (mysql , oracle 등) 암호화에 의해서만 의존해서는 안된다( 보안에 취약)!!!
많은 중소 웹사이트들 및 쇼핑사이트들이 위와 같이 데이터베이스 단계에서 암호화를 많이 활용중에 있다
BUT!!!
스프링 시큐리티를 이용한다면 이런 복잡한 암호화 단계를 개발영역으로 적용시키면서 동시에 코드 상의 복잡함도 대부분 축소할 수 있게 된다. 게다가 스프링 시큐리티는 암호화 클래스를 BEAN 으로 설정한 뒤 따로 주입받아 사용하기 때문에 기능의 확장에 있어서도 매우 자유롭다. |
비밀번호 암호화하기(스프링 시큐리티)
1.Pom.xml 설정 !!!
<!--스프링시큐리티 web 라이브러리--> 스프링 시큐리티 버전 예민하므로 주의 !!!! 스프링 버전에 맞는 것으로 할것
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<!--스프링시큐리티 core 라이브러리-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<!--스프링시큐리티 config 라이브러리-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
2.spring-security.xml 생성하기
비밀번호 문서를 위한 bean 추가
BCryptPasswordEncoder 은 스프링 시큐리티에서 제공해주는 라이브러리 클래스
단 !!! 비밀번호 암호화 메서드 , 와 인코딩 된 비밀번호를 비교해주는 역할
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<beans:bean id="bcryptPasswordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
</beans:beans>
3.web.xml 에 spring security.xml 추가 해주기
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 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>
4. 회원등록시 생성한 BCryptPasswordEncoder 서비스에서 사용 가능하게 적용 !!!
@Inject
PasswordEncoder passwordEncoder;
@Override
public void regist(MemberVO vo) throws Exception {
System.out.println("서비스레지스");
String encPassword = passwordEncoder.encode(vo.getMemberPassword());
vo.setMemberPassword(encPassword);
//System.out.println("암호화된 비밀번호 : "+user.getUserPassword());
dao.insertUser(vo);
System.out.println(vo);
System.out.println("/////////////////////// 찍히"); 회원가입
..........
암호화 되어서 DB 들어가는 것을 확인
5. 로그인시 다시 디코딩해서 비교확인 !!!
//로그인
@Override
public MemberVO login(LoginDTO dto) throws Exception {
System.out.println("service dto: "+dto);
System.out.println("멤버서비스 dto");
try {
String pw = dao.getUserPw(dto.getMemberEmail()).getMemberPassword();
String rawPw = dto.getMemberPassword();
//System.out.println("db pW : "+pw);
//System.out.println("입렵Pw:"+rawPw);
//System.out.println(passwordEncoder.matches(rawPw, pw));
if(passwordEncoder.matches(rawPw, pw)) {
System.out.println("비밀번호 일치");
dto.setMemberPassword(pw);
}else {
//============System.out.println("비밀번호 불일치");=======================
//주석 해제 시 비 암호화 설정된 db Pw 값으로 로그인 되지 않음
dto.setMemberPassword(pw);
}
}catch(NullPointerException npe){
MemberVO vo=new MemberVO();
vo=null;
System.out.println(vo);
return vo;
}catch (Exception e){
MemberVO vo=new MemberVO();
vo=null;
return vo;
}
return dao.login(dto);
}
'프로그래밍 > SPRING' 카테고리의 다른 글
[SPRING] SPRING SECURITY 로그인 인증 (4) | 2018.04.17 |
---|---|
[SPRING] 이메일 인증 (4) | 2018.02.27 |
[Spring] 스프링 MVC 패턴 (0) | 2018.02.21 |
[Spring] 스프링 네이버 로그인 API 연동 (2) | 2018.02.07 |
Spring Anntation (0) | 2018.01.30 |