spring security 3 에서 인증 코드 구현
인증 코드 구현
인증 코드 의 예 는 현재 소 털 처럼 많 습 니 다. 여러분 구 글 은 한 번 에 많 습 니 다. 일반적인 방법 은 session 에서 무 작위 문자열 을 만 들 고 사용자 가 server 에 제출 하여 검증 하 는 것 입 니 다.최근 SS3 를 보고 있 기 때문에 인증 코드 와 SS3 의 결합 을 주로 이야기 하고 싶 습 니 다.
인증 코드 와 SS3 가 결 합 된 실현 방안
프로젝트 1: filter 를 직접 작성 합 니 다.
엄 밀 히 말 하면 이것 은 SS3 와 결합 하 는 것 이 아니 라 프로젝트 에서 하나의 filter 를 실현 한 다음 에 차단 순 서 를 SS3 의 filter 앞 에 두 면 된다.이렇게 하면 간단 하면 서도 통용 되 기 때문에 앞으로 SS3 를 하지 않 아 도 사용 할 수 있다.단점 도 뚜렷 하 다. 그것 은 SS3 에 설 치 된 모든 것 을 다시 설정 해 야 한 다 는 것 이다. 예 를 들 어 차단 한 URL, 실패 한 URL, 잘못된 자원 파일, 이상 후의 재 설정 등 이다.
프로젝트 2: 새로운 SS3 filter 만 들 기
이 중 하 나 를 설명 함으로써 "before" 속성 을 설정 하여 "FORM LOGIN FILTER" 앞에서 차단 하면 됩 니 다.이렇게 하면 더욱 집중 적 이 고 직관 적 으로 보이 고 SS3 요소 에 대한 기본 설정 변화 도 작 지만 방법 과 비슷 하면 많은 것 을 설정 하고 기본 코드 를 많이 써 야 한다.
프로젝트 3: 확장 UsernamePassword AuthenticationFilter
개선 방안 은 UsernamePassword AuthenticationFilter 를 계승 하고 attempty Authentication 방법 을 다시 불 러 와 검증 코드 의 논 리 를 추가 합 니 다.위 에서 말 한 기본 코드 를 작성 하 는 것 을 줄 이 는 것 이 장점 입 니 다. 관련 URL, 자원 파일 의 설정 은 이 filter 에서 한 번 만 설정 하면 됩 니 다.기 존 NamingSpace 성명 의 차단기 체인 에 삽입 하 는 것 이 번 거 로 운 것 이 단점 이다.저 희 는 NamingSpace 의 설정 정 보 를 이해 하고 차단기 의 순서, 별명, 역할 을 이해 하 며 SS3 의 소스 코드 에 깊이 들 어가 야 합 니 다. UsernamePassword AuthenticationFilter 의 소스 코드 를 보고 부모 클래스 에서 어떤 속성 이 설정 되 어야 하거나 재 설정 해 야 하 는 지 알 아야 합 니 다.
비록 이런 방법 은 좀 귀 찮 지만, 나 는 결국 이 방법 을 선택 했다.SS3 를 이해 하 는 데 어려움 이 있 고 그 장점 도 분명 하기 때문이다.
실현 절차
1. 사용자 이름 암호 인증 필터
이 단 계 는 간단 합 니 다. Validate Code UsernamePassword AuthenticationFilter 는 UsernamePassword AuthenticationFilter 를 계승 하고 attempty Authentication 방법 을 다시 불 러 와 인증 코드 의 논 리 를 추가 합 니 다.SS3 의 저자 들 에 게 살짝 항의 하 겠 습 니 다. 그 'post Only' 속성 은 왜 읽 기 방법 을 쓰 지 않 습 니까?..............................................................
attemAuthentication 의 코드 세 션 을 살 펴 보 겠 습 니 다:
if (!isAllowEmptyValidateCode())
checkValidateCode(request);
return this.getAuthenticationManager().authenticate(authRequest);
checkValidate Code 도 간단 합 니 다.
protected void checkValidateCode(HttpServletRequest request) {
String sessionValidateCode = obtainSessionValidateCode(request);
String validateCodeParameter = obtainValidateCodeParameter(request);
if (StringUtils.isEmpty(validateCodeParameter) || !sessionValidateCode.equalsIgnoreCase(validateCodeParameter)) {
throw new AuthenticationServiceException(messages.getMessage("validateCode.notEquals"));
}
}
여기에 몇 가지 설명 하고 싶 은 것 이 있다.
2. 사용자 정의 UsernamePassword AuthenticationFilter 설정
바꾸다
원래 있 던 것 은 더 이상 사용 할 수 없 을 것 입 니 다. 우 리 는 하 나 를 사용 하여 교체 합 니 다.
position 은 원래 별명 인 "FORM LOGIN FILTER" 에 표 시 된 클래스 를 바 꾸 었 습 니 다: UsernamePassword AuthenticationFilter.그러나 일이 그리 간단 하지 않 습 니 다. SS3 매 뉴 얼 2.3, 5.4 절 을 읽 으 면 Authentication Entry Point 가 필요 하 다 는 것 을 알 게 되 었 습 니 다.
상응하는 것 도 약간의 수정 이 필요 하 다.
ValidateCodeUsernamePasswordAuthenticationFilter 설정
Validate CodeUsernamePassword AuthenticationFilter 를 설정 할 때 인증 성공, 실패 한 프로 세 서 를 포함 하여 필요 한 속성 을 완전히 설정 해 야 합 니 다.여기 서 많이 나 온 설정 은 주로 bean 에 있 고 bean 에 필요 한 속성 입 니 다. 예 를 들 어 인증 필터 URL, 인증 성공 URL, 인증 실패 URL 도 설정 해 야 하기 때문에 저희 의 작업 은 많 지 않 습 니 다.
여기 있 는 "authenticationManager" 속성 을 주의 하 십시오. NamingSpace 의 기본 설정 에서 이 속성 을 특별히 지정 할 필요 가 없습니다. SS3 에서 찾 을 수 있 습 니 다.이 때, 우 리 는 별명 을 설정 해 야 합 니 다:
최적화 좀 해.
설정 파일 에서 로그 인 링크 가 여러 번 인용 되 는 것 을 보 았 습 니 다. 이 를. properties 파일 에 쓰 고 xml 에서 참조 할 수 있 습 니 다.
여기까지 모든 것 이 준비 되 었 으 니 인증 코드 는 정상적으로 작 동 할 수 있 습 니 다.
후기
저 는 08 년 부터 Acegi 1.0.6 을 이용 하여 회사 내 다 중 시스템 에서 볼 수 있 는 인증, 권한 수여 기능 을 구 축 했 습 니 다. 그 당시 에 NamingSpace 가 없 었 고 어떤 것 은 요청 에 대한 차단기 체인 과 Spring beans 였 습 니 다. 번 거 롭 지만 뚜렷 하고 명료 합 니 다.이 체인 을 따라 내 려 가면 어떤 인증, 권한 수여 업무 의 절차 와 그 내부 원인, 예 를 들 어 유명한 투표 전략 을 알 수 있 습 니까?몇 년 후에 다시 돌 이 켜 보면 예전 의 Acegi 는 Spring Security 로 변신 하여 많은 기능 을 풍부 화 시 켰 고 문서 도 많이 개선 되 었 다. 그러나 그의 친아버지 Spring 처럼 꽃 옷 을 입 었 다. NamingSpace 는 멋 있 지만 초보 자가 그 안의 어려움 을 이해 하 게 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.