http://songc92.tistory.com/46
(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);
}
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 24 | apt-get upgrade 수행 시 특정 패키지만 빼고 설치하기 | proin | 2018.10.04 | 0 |
| 23 | apt-get upgrade 수행 시 특정 패키지만 설치하기 | proin | 2018.10.04 | 1 |
| 22 | 필요없을지도 모르지만 왠지 겁나니까 | proin | 2018.10.02 | 2 |
| 21 | Info - XE 백업 및 복원 (통째로 서버 옮기기) | proin | 2018.10.02 | 1 |
| 20 | 워드프레스와 백업(backup) | proin | 2018.10.02 | 0 |
| 19 | iptables 정리 | proin | 2018.10.02 | 3 |
| 18 | 변경된 iptables 저장 방법 | proin | 2018.10.02 | 0 |
| 17 | 내 서버에는 누가 들어오는걸까? (실시간 user-agent 분석기) | proin | 2018.10.02 | 1 |
| 16 | BIND DNS Server | proin | 2018.10.02 | 0 |
| 15 | Setting up a BIND DNS Server | proin | 2018.10.02 | 1 |
| 14 | How To Configure BIND as a Private Network DNS Server on Ubuntu 18.04 | proin | 2018.10.02 | 0 |
| 13 | 뭔가 쓸만 할수도 있는 사이트 | proin | 2018.10.01 | 1 |
| 12 | OpenVPN Access Server 구축하기 | proin | 2018.10.01 | 6 |
| 11 | ZmEu 해킹시도 접근 | proin | 2018.10.01 | 0 |
| 10 | [Linux] 압축 파일 관리 - gz 압축하기, 압축풀기 | proin | 2018.10.01 | 1 |
| 9 | [devil's camp] - 트위터 봇 만들기 (권준혁) | proin | 2018.09.27 | 0 |
| 8 | 아파치 가상호스트 | proin | 2018.09.26 | 1 |
| » | [SPRING] 스프링 시큐리티 (비밀번호 암호화) | proin | 2018.09.19 | 3 |
| 6 | [MySQL] MySQL의 password() 함수와 암호화 | proin | 2018.09.19 | 2 |
| 5 | 안전한 패스워드 저장 | proin | 2018.09.19 | 1 |