Pregunta

Poco a poco voy volviendo loco tratando de configurar Spring Security 3.0.0 para asegurar una aplicación.

He configurado el servidor (el embarcadero) para requerir la autenticación del cliente (mediante una tarjeta inteligente). Sin embargo, me parece que no puede conseguir el applicationContext-security.xml e implementación UserDetailsService derecha.

En primer lugar, desde el archivo de contexto de aplicación:

<?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"/>

El UserDetailsService se ve así:

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;

}

}

La aplicación tiene una "primera página" con un botón de inicio de sesión, por lo que el acceso a ese no debería requerir ningún tipo de autenticación.

Cualquier ayuda es apreciada.

¿Fue útil?

Solución

  

La aplicación tiene una "primera página" con un botón de inicio de sesión, por lo que el acceso a ese no debería requerir ningún tipo de autenticación.

Algo malo está aquí. Si la configuración de su contenedor servlet a requerir autenticación de cliente, no se puede tener tales abierta para todos página, en ese apretón de manos caso de autenticación voluntad no éxito para los usuarios sin tarjeta inteligente y que ni siquiera ver la página de error de contenedores - será de error del navegador.

Se puede hacer haciendo recipiente a permitir de autenticación del cliente y hacer la página de inicio de sesión abierta a los usuarios anónimos y asegure otras páginas de SpringSec. Pero no voy a recomendar esta aplicación de tarjeta inteligente en PKI. autenticación de tarjeta inteligente implica importancia para la seguridad y es más fiable que los usuarios de tarjetas inteligentes no echado a principios de apretón de manos contenedor. En ese caso, usted todavía puede tener página de entrada fácil de usar en otro puerto con un botón de "Inicio de sesión" vinculado a su aplicación.

Si necesita ayuda con la configuración de SpringSecurity, por favor añadir más información acerca de los problemas a su puesto.

Otros consejos

Desde el punto de vista de configuración, que se ve bien. ¿Cuál es el error que se está viendo? ¿Estás viendo su UserDetailsService te invocan con CN de X.509 cert?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top