개발 모드에 대한 스프링 보안 사전 승인
-
21-08-2019 - |
문제
응용 프로그램을 개발하는 동안 다른 역할을 가진 다른 사용자로 신속하게 로그인하여 응용 프로그램이 어떻게 제시되는지 확인하는 것이 매우 유용합니다.
사용자 이름을 입력하고 비밀번호를 입력하는 것은 재미없고 시간 낭비입니다. 내가하고 싶은 것은 :
- 사용 가능한 사용자 이름 목록이있는 페이지/패널을 추가하십시오.
- 사용자 이름을 클릭하면 Spring Security 용 이벤트가 생성되어 비밀번호를 입력하지 않고 사용자를 인증 된 것으로 인식 할 수 있습니다.
- 링크를 클릭 한 후 지정된 사용자로 인증됩니다.
NB: 비밀번호는 양식을 사용하여 일반 텍스트로 해시 및 제출되므로 링크에서 암호를 인코딩하는 것은 옵션이 아닙니다.
확실히 이 기능은 개발 시간에만 존재합니다.
이것을 어떻게 달성 할 수 있습니까?
해결책
웹 애플리케이션을 위해 이렇게했습니다.
구성 매개 변수가 있습니다 context.xml
서버의 (물론 개발 서버에서만). 이 매개 변수에는 분리 된 사용자 이름과 암호 목록이 포함되어 있습니다.
로그인 페이지 (jsp (x))는 각 사용자 이름에 대한 추가 양식 및 제출 버튼을 추가합니다. 암호 항목은 컨텍스트 매개 변수를 형성합니다. 따라서 사용자가 해당 버튼을 클릭하면 사전 정의 된 로그인 데이터가있는 일반 로그인 프로세스가 트리거됩니다.
서버 context.xml
...
<Context>
...
<Parameter name="quickLogin"
value="admin:passwd,user:otherPasswd"
override="false" />
</Context>
login.jspx
...
<!-- Login for debugging purposes -->
<c:forTokens items="${initParam.quickLogin}" delims="," var="loginPassword">
<c:set var="login" value="${fn:split(loginPassword, ':')[0]}" />
<c:set var="password" value="${fn:split(loginPassword, ':')[1]}" />
<form name="debugLogin" action="${form_url}" method="POST" >
<crsf:hiddenCrsfNonce/>
<input type="hidden" name='j_username' value="${fn:escapeXml(login)}" />
<input type="hidden" name='j_password' value="${fn:escapeXml(password)}" />
<input type="submit" value="${fn:escapeXml(login)} login" />
</form>
</c:forTokens>
...
다른 팁
개발 모드에는 inmemorydaoimpl을 사용하십시오. 메모리에 저장된 사용자와 암호를 만드는 것은 매우 쉽습니다.
<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
admin=admin,ROLE_ADMIN,ROLE_USER
user1=user1,ROLE_USER
user2=user2,ROLE_USER
</value>
</property>
</bean>
개발 모드에서는 이것을 인증 제공 업체에 주입하십시오. 프로덕션에서는 적절한 DB 또는 LDAP 구현으로 대체하십시오.
이해하기 위해 일부 특정 URL이 요청 된 경우 Springsecurity가 자동으로 인증하고 싶습니다 (그리고 패널/페이지 에이 URL에 대한 링크가있을 것입니다).
사용자 정의 필터 작성은 어떻습니까 :
public class YourSpecialDevelopmentTimeFilter
extends AuthenticationProcessingFilter
implements SyncSecurityFilter
....
그것은 무시할 것입니다 :
protected boolean requiresAuthentication(
HttpServletRequest request, HttpServletResponse response)
그리고 일부 매개 변수에 따라 true를 반환합니다 request
?
물론 또 다른 관심사는 생산 환경 에서이 기능을 갖지 않는 것입니다. 그것은 항상 다른 코드 기반을 갖는 위험한 것입니다. 데브 그리고 찌르다.