문제

응용 프로그램을 개발하는 동안 다른 역할을 가진 다른 사용자로 신속하게 로그인하여 응용 프로그램이 어떻게 제시되는지 확인하는 것이 매우 유용합니다.

사용자 이름을 입력하고 비밀번호를 입력하는 것은 재미없고 시간 낭비입니다. 내가하고 싶은 것은 :

  • 사용 가능한 사용자 이름 목록이있는 페이지/패널을 추가하십시오.
  • 사용자 이름을 클릭하면 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?

물론 또 다른 관심사는 생산 환경 에서이 기능을 갖지 않는 것입니다. 그것은 항상 다른 코드 기반을 갖는 위험한 것입니다. 데브 그리고 찌르다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top