Spring security 계 정 암호 화 실현
먼저 전단 페이지 에서 등 록 된 계 정 정 정 보 를 controller 층 으로 보 낸 다음 에 service 층 과 dao 층 을 거 쳐 마지막 으로 입고 합 니 다.그 중에서 암호 화 는 service 층 에 두 고 암호 화 한 후에 입고 해 야 합 니 다.
spring security 에 암호 화 된 암호 화 클래스 가 있 습 니 다.암호 화 된 문자열 을 암호 화 하 는 데 사용 할 수 있 습 니 다.
public String encode(CharSequence rawPassword) {
String salt;
if (strength > 0) {
if (random != null) {
salt = BCrypt.gensalt(strength, random);
}
else {
salt = BCrypt.gensalt(strength);
}
}
else {
salt = BCrypt.gensalt();
}
return BCrypt.hashpw(rawPassword.toString(), salt);
}
사용 시 spring 설정 파일 에 암호 화 된 bean 을 설정 할 수 있 습 니 다.이렇게 하면 service 에 직접 주입 할 수 있 습 니 다.암호 화 된 데이터베이스 에 저 장 된 것 은 암호 화 된 문자열 입 니 다.
1.2 암호 화 된 로그 인 과정
암 호 를 암호 화한 후 데이터베이스 에 저 장 된 것 은 암호 화 문자열 입 니 다.사용자 가 로그 인 요청 을 하면 프레임 워 크 는 같은 암호 화 알고리즘 을 사용 하여 전단 에 전 달 된 암 호 를 암호 화하 고 암호 화 문자열 을 얻 은 다음 데이터베이스 에서 조회 한 문자열 과 비교 합 니 다.
코드 구현
구체 적 인 공정 코드 는 제 공정 예 시 를 참고 할 수 있 습 니 다.다음 글 은 사용자 추가 와 관련 된 부분 만 제시 합 니 다.
설정 파일 에 암호 화 클래스 설정
<bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
</bean>
2.1 사용자 의 페이지 를 다음 과 같이 추가 합 니 다.register.html
<html>
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<form action="/user/add.do" method="post">
:<input type="text" name="username" placeholder=" "><br>
:<input type="password" name="password" placeholder=" "><br>
<input type="submit" value=" ">
</form>
</body>
</html>
2.2 controller 층 에서 사용 자 를 늘 리 는 방법 만 들 기
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@PostMapping("/add")
public String add(UserInfo userInfo){
userService.add(userInfo);
return "success";
}
}
2.3 서비스 계층
@Autowired
private BCryptPasswordEncoder passwordEncoder;
...//
@Override
public void add(UserInfo userInfo) {
//
userInfo.setPassword(passwordEncoder.encode(userInfo.getPassword()));
userDao.add(userInfo);
}
여기 passwordEncoder 는 설정 파일 에 설 정 된 암호 화 bean 입 니 다.주입 후 직접 사용 할 수 있 습 니 다.dao 층,여기 더 이상 열거 하지 않 겠 습 니 다.
테스트
프로젝트 를 시작 하고 로그 인 에 성공 한 후 첫 페이지 로 이동,
새 계 정 등록 을 선택 한 후 등록 페이지 로 건 너 뛰 기
계 정과 비밀 번 호 를 입력 하고 등록 하면 데이터베이스 에 새로운 기록 을 삽입 합 니 다.
여기 제 페이지 에 입력 한 것 은 admin/admin 입 니 다.데이터베이스 에 저 장 된 password 는 암호 화 된 것 입 니 다.
$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG
4.암호 화 된 계 정 으로 로그 인이때 새로 만 든 이 계 정 으로 로그 인 하면 로그 인 에 실패 합 니 다.spring security 인증 시의 암호 화 방식 을 설정 하지 않 았 기 때문에 기본적으로 암호 화 되 지 않 기 때문에 프론트 데스크 에 입력 한 암호 화 문자열 과 데이터베이스 에 있 는 암호 화 문자열 을 직접 비교 합 니 다.
이 계 정 으로 로그 인 하려 면 다음 과 같은 설정 이 필요 합 니 다.
spring security 설정 파일 에 암호 화 정책 설정
<security:authentication-manager>
<!-- userservice -->
<security:authentication-provider user-service-ref="userService">
<security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
</security:authentication-manager>
<bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
</bean>
userService 의 loadUserByUsername 방법 에서 암호 문자열 에 연 결 된{noop}문자열 을 제거 합 니 다.원래 이것 은 암호 화 되 지 않 은 상황 에 맞 게 암호 화 되 지 않 은 것 입 니 다.
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserInfo userInfo = userDao.findByUsername(username);
User user=new User(userInfo.getUsername(),userInfo.getPassword(),getRoles());
return user;
}
그리고 방금 등 록 된 admin/admin 을 사용 하면 로그 인 에 성공 할 수 있 습 니 다.위의 두 부분 을 진행 하면 데이터베이스 에 있 는 이전 계 정 은 로그 인 할 수 없습니다.데이터베이스 에 있 는 비밀 번 호 는 암호 화 되 지 않 았 기 때문에 프레임 워 크 는 프론트 데스크 톱 에서 전달 한 비밀 번 호 를 암호 화한 다음 에 데이터베이스 와 비교 합 니 다.그래서 위 에 새로 등 록 된 이 계 정 admin/admin 을 꼭 기억 하 세 요.
여기 admin 에 대응 하 는 암호 화 문자열 을 드 리 겠 습 니 다.
$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG
방금 등 록 된 계 정 을 잊 어 버 리 면 데이터베이스 에 admin/admin 기록 을 삽입 할 수 있 습 니 다.총화
계 정 을 추가 하려 면 주로 spring security 가 자체 적 으로 가지 고 있 는 암호 화 클래스 인 BCryptPasswordEncoder 로 사용자 암 호 를 암호 화해 야 합 니 다.
새로 등 록 된 계 정 으로 로그 인 하려 면 설정 파일 에 암호 화 정책 을 설정 해 야 합 니 다.
설정 후 원래 계 정 은 비밀번호 가 암호 화 되 지 않 아 사용 할 수 없습니다.
6.예시 공정 소스 코드
예제 공 사 는 이미 코드 클 라 우 드 에 올 렸 으 니,필요 하 시 면 참고 하 시기 바 랍 니 다.
예제 공정
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.