Spring security 계 정 암호 화 실현

1.원리 분석 1.1 암호 화 원리
먼저 전단 페이지 에서 등 록 된 계 정 정 정 보 를 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/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG4.암호 화 된 계 정 으로 로그 인
이때 새로 만 든 이 계 정 으로 로그 인 하면 로그 인 에 실패 합 니 다.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.예시 공정 소스 코드
예제 공 사 는 이미 코드 클 라 우 드 에 올 렸 으 니,필요 하 시 면 참고 하 시기 바 랍 니 다.
예제 공정
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기