2010-02-08 17 views
14

he puesto la seguridad básica de primavera en mi/Java EE aplicación web de Primavera. Puedo restringir el acceso a ciertas páginas y forzar el inicio de sesión (con roles, etc.). Es necesario que haya un formulario donde los nuevos usuarios puedan registrarse y especificar un nombre de usuario y contraseña.añadir nuevos usuarios en la primavera de Seguridad

Me pregunto si, para crear nuevos usuarios, simplemente consulto y actualizo las tablas de seguridad de primavera correspondientes (por ejemplo, usando hibernación) como lo haría para cualquier consulta, ¿o está incorporada en la funcionalidad para crear nuevos usuarios? Si simplemente utilizo un DAO estándar para actualizar a los usuarios, ¿cómo debo manejar el hash de las contraseñas?

Gracias!

Respuesta

1

No hay tal construido en la funcionalidad para crear usuarios en la seguridad de la primavera. Se implementa solo para proteger recursos basados ​​en las reglas para usuarios que intentan iniciar sesión y acceder a recursos.

+0

Gracias - lo que, básicamente, la forma correcta sería la de actualizar solo las tablas de seguridad apropiadas usando la primavera mis DAOs? – james

+0

Sí. debe tener un controlador/proceso separado para manejar el registro –

1

Para usar algoritmos hash Puede agregar <password-encoder> a <authentication-provider>.

+0

¿Cómo afectará esto el proceso de agregar nuevos usuarios? Es de suponer que habrá un formulario en el que el usuario ingresará su nombre de usuario y contraseña, etc. Estos se insertarán en la base de datos. Entonces, no estoy seguro de cómo usar afectará esto? Supongo que necesito ajustar manualmente la contraseña antes de insertarla. – james

+1

< contraseña-codificador > es solo para el proceso de autorización.Le ayudará a comparar la contraseña escrita por el usuario con la contraseña en la base de datos. Pero contraseñas en la base de datos Tiene que hacer hash manualmente. –

+0

-1 para respuesta no relacionada –

4

Spring Security tiene JdbcUserDetailsManager. Es una subclase de UserDetailsService basado en JDBC predeterminado con métodos adicionales para crear usuarios, etc. Puede usarlo como un DAO en lugar del suyo.

Sin embargo hash de contraseñas deben ser manejados de forma explícita. Por ejemplo, si usa hash SHA, puede usar .

12

usted tiene que combinar todas las respuestas en esta página.

  • Teja es correcto, no hay una manera facilitada de agregar un usuario sobre la marcha.
  • Axtavt también es correcto. Necesita algún tipo de capa de acceso/servicio de datos para actualizar su tabla de usuarios. En otras palabras, necesita crear la vista como cualquier otra página con algún tipo de acceso de súper usuario.
  • Michal y ax le aconsejan que probablemente necesite codificar su contraseña antes de guardarla. El resumen debe coincidir con lo que estés usando cuando recuperes las credenciales.

He aquí un ejemplo config mediante JDBC:

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

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

    <http auto-config="true" access-denied-page="/accessDenied.jsp"> 
     <!-- login page has anonymous access --> 
     <intercept-url pattern="/login.jsp*" filters="none"/> 
     <!-- all pages are authenticated --> 
     <intercept-url pattern="/**.action" access="ROLE_USER, ROLE_ADMIN" /> 
     <!-- all admin contextual pages are authenticated by admin role --> 
     <intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> 
     <form-login authentication-failure-url="/login.jsp?login_error=1" default-target-url="/index.action" login-page="/login.jsp"/> 
     <logout logout-success-url="/index.action"/> 
    </http>  

    <authentication-provider> 
     <password-encoder hash="md5" /> 
     <jdbc-user-service data-source-ref="dataSource" 
      authorities-by-username-query="SELECT username, role AS authority FROM sweet_users WHERE username = ?" 
      users-by-username-query="SELECT username, password, 1 AS enabled FROM sweet_users WHERE username = ?" /> 
    </authentication-provider> 
</beans:beans> 

Se trata de utilizar una consulta personalizada para obtener los usuarios. Spring Security espera una tabla de usuarios con nombre de usuario, contraseña y columna de autoridad, respectivamente, así que haga lo que debe hacer para devolverlos. Debe proporcionar la fuente de datos.

Si ha creado una página para añadir usuarios bajo el admin/contexto, sería ser autenticado de acuerdo con esta configuración.

Añadir un grano para su UserDao y/o UserService y/o AuthenticationService y pasarlo a su controlador de Usuarios ...

Cuestiones relacionadas