2012-08-16 11 views
6

he implementado Expresión primavera de Seguridad en mi controlador de primavera aplicación:la seguridad de Primavera y sin forma de la conexión

@Controller 
@RequestMapping("init") 
public class InitController { 
    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public @ResponseBody String home(){ 
     return "This is the init page"; 
    } 
} 

Con esta configuración de seguridad:

<http auto-config="true" create-session="stateless" use-expressions="true"> 
    <intercept-url pattern="/_ah*" access="permitAll" /> 
    <intercept-url pattern="/init/*" access="hasRole('ROLE_ADMIN')"/> 
    <intercept-url pattern="/init*" access="hasRole('ROLE_ADMIN')"/> 
</http> 

Cuando se accede a este recurso forma el inicio de sesión de primavera por defecto se muestra (http://localhost:8888/spring_security_login) sin embargo, no quiero que esto suceda y que solo quiero tener las credenciales para insertarlas en el encabezado de solicitud como "x-authorization-key" o lo que sea que se ajuste al escenario.

¿Cuál es la posible solución para esto?

  • ¿Es una buena tener sólo la autorización de clave x estar en la solicitud
  • Si es así, cómo encaja con el mecanismo de seguridad de la primavera, que es la forma que encaja con el "hasRole "la expresión
  • es importante que el del mi servicio web es sin estado, y cada solicitud se autentica
  • Por último, ¿cómo hacer trato con la seguridad de primavera sin tener que lidiar con el formulario de acceso primavera

cabecera

Respuesta

8

Probablemente deberías leer la descripción en what auto-config does, luego eliminarla para deshabilitar form-login. Su configuración será más clara si configura específicamente lo que desea usar.

No está claro por su pregunta lo que quiere que se incluya en el encabezado x-authorization-key. Si solo está autenticando con un identificador de cliente y un secreto compartido, entonces también podría usar la autenticación básica, ya que es compatible desde el primer momento y solo puede agregar <http-basic /> a su configuración. Si tiene algo más personalizado en mente, entonces probablemente tendrá que implementar un filtro personalizado y add it to the Spring Security filter chain para extraer las credenciales y procesarlas.

Cómo se ajusta su mecanismo de autenticación también depende de en qué consiste realmente. Normalmente, los usuarios tendrán roles asignados que se cargan cuando se autentican, generalmente desde una base de datos de algún tipo. La expresión hasRole simplemente comprueba si el usuario actual tiene el rol especificado. A menudo, solo necesitará crear un UserDetailsService que cargue su información de usuario en un formato estándar que se conecta fácilmente al marco. Esto está cubierto en detalle en otro lugar. Si realmente necesita algo más personalizado this blog article en GAE, la integración incluye detalles de cómo puede integrarse con un sistema más complicado.

Spring Security será not create or use a session si usa create-session='stateless'.

P.S. Realmente no necesita incluir los mismos atributos de seguridad tanto en el nivel de la URL como en su controlador que maneja la misma URL.

Cuestiones relacionadas