春季安全无形体登录

问题描述:

我在申请春季控制器实现Spring Security的表达:春季安全无形体登录

@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"; 
    } 
} 

有了这个安全配置:

<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> 

当这种资源被访问的默认春天登录表单(http://localhost:8888/spring_security_login)但是我不希望发生这种情况,我只是想要将凭据插入请求标头,如“x-authorization-key”或任何适合该场景的内容。

这有什么可能的解决方案?

  • 它是一个很好的,只是让X-授权密钥是在请求
  • 如果是这样,它是如何适应与Spring的安全机制,即如何,它正好与“hasRole “表达
  • 这是重要的我的Web服务是无状态的,并且每个请求通过认证
  • 最后,如何做处理春季安全,而无需处理与Spring登录表单

您应该阅读关于what auto-config does的描述,然后将其删除以禁用form-login。如果你专门配置你想使用的配置,你的配置会更清晰。

从您的问题中不清楚您希望包含在x-authorization-key标头中的内容。如果您只是使用客户端ID和共享密钥进行身份验证,那么您最好使用基本身份验证,因为它已经支持开箱即用,您可以将<http-basic />添加到您的配置中。如果您有更多定制的内容,那么您可能不得不实施自定义过滤器并提取证书并对其进行处理。

您的身份验证机制如何适用也取决于它实际组成的内容。通常情况下,你的用户会分配在他们进行身份验证时加载的角色,通常来自某种数据库。 hasRole表达式仅检查当前用户是否具有指定的角色。通常,您只需创建一个UserDetailsService即可将您的用户信息加载到可轻松插入框架的标准格式中。这在其他地方已有详尽报道。如果你真的需要更多定制的东西this blog article GAE集成包括你如何可能会与更复杂的系统集成的细节。

如果您使用create-session='stateless',Spring Security将会not create or use a session

P.S.您并不需要在URL级别和处理相同URL的控制器上包含相同的安全属性。