문제

나는 애플리케이션을 보호하기 위해 Spring Security 3.0.0을 구성하려고 천천히 미쳐가고 있습니다.

클라이언트 인증(스마트 카드 사용)을 요구하도록 서버(부두)를 구성했습니다.그러나 applicationContext-security.xml 및 UserDetailsService 구현을 제대로 얻을 수 없는 것 같습니다.

먼저 애플리케이션 컨텍스트 파일에서 다음을 수행합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">


<security:global-method-security secured-annotations="enabled" />

<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
    <security:x509 subject-principal-regex="CN=(.*?)," user-service-ref="accountService" />
</security:http>

<bean id="accountService" class="com.app.service.AccountServiceImpl"/>

UserDetailsService는 다음과 같습니다.

public class AccountServiceImpl implements AccountService, UserDetailsService {

private static final Log log = LogFactory.getLog(AccountServiceImpl.class);

private AccountDao accountDao;

@Autowired
public void setAccountDao(AccountDao accountDao) {
    this.accountDao = accountDao;
}

public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, DataAccessException {

    log.debug("called loadUserByUsername()");
    System.out.println("called loadByUsername()");

    Account result = accountDao.getByEdpi(s);
    return result;

}

}

애플리케이션에는 로그인 버튼이 있는 "첫 페이지"가 ​​있으므로 해당 페이지에 액세스하려면 어떤 종류의 인증도 필요하지 않습니다.

도움을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

애플리케이션에는 로그인 버튼이 있는 "첫 페이지"가 ​​있으므로 해당 페이지에 액세스하려면 어떤 종류의 인증도 필요하지 않습니다.

여기에 문제가 있습니다.서블릿 컨테이너를 다음과 같이 설정한 경우 필요하다 클라이언트 인증에서는 이러한 개방형 페이지를 가질 수 없습니다. 이 경우 스마트 카드가 없는 사용자에 대한 인증 핸드셰이크가 성공하지 못하고 컨테이너 오류 페이지도 표시되지 않습니다. 대신 브라우저 오류가 발생합니다.

컨테이너를 만들어서 할 수 있습니다. 허용하다 클라이언트 인증 및 로그인 페이지를 익명 사용자에게 공개하고 SpringSec을 통해 다른 페이지를 보호합니다.하지만 스마트카드-PKI 앱에는 이 방법을 권장하지 않습니다.스마트 카드 인증은 보안 중요성을 의미하며 스마트 카드가 아닌 사용자를 컨테이너 핸드셰이크 초기에 폐기하는 것이 더 안정적입니다.이 경우에도 앱에 연결된 "로그인" 버튼을 사용하여 다른 포트에서 사용자 친화적인 로그인 페이지를 가질 수 있습니다.

SpringSecurity 설정에 도움이 필요하면 게시물에 문제에 대한 추가 정보를 추가하세요.

다른 팁

구성 관점에서 보면 괜찮아 보입니다.어떤 오류가 표시되나요?UserDetailsService가 X.509 인증서의 CN으로 호출되는 것을 보고 계십니까?

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