Java 没有表单登录的Spring安全性

Java 没有表单登录的Spring安全性,java,spring,rest,spring-security,Java,Spring,Rest,Spring Security,我已经在我的应用程序Spring控制器中实现了Spring安全表达式: @Controller @RequestMapping("init") public class InitController { @PreAuthorize("hasRole('ROLE_ADMIN')") @RequestMapping(value = "/", method = RequestMethod.GET) public @ResponseBody String home(){

我已经在我的应用程序Spring控制器中实现了Spring安全表达式:

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

访问此资源时,将显示默认的Spring登录表单(
http://localhost:8888/spring_security_login
)但是,我不希望发生这种情况,我只希望在请求头中插入凭据,如“x-authorization-key”或任何适合场景的内容

对此,可能的解决方案是什么

  • 请求中只包含x-authorization-key是一种好方法吗
  • 如果是这样的话,它如何与Spring安全机制相匹配,也就是说它如何与“hasRole”表达式相匹配
  • MyWeb服务是无状态的,并且每个请求都经过身份验证,这一点很重要
  • 最后,如何处理Spring安全性而不必处理Spring登录表单

标题

您可能应该阅读上的说明,然后将其删除以禁用
表单登录
。如果您专门配置了要使用的内容,您的配置将更加清晰

您的问题不清楚您希望在
x-authorization-key
标题中包含哪些内容。如果您只是使用客户端Id和共享密钥进行身份验证,那么您也可以使用基本身份验证,因为它已经得到了开箱即用的支持,您只需将
添加到配置中即可。如果您考虑的是更定制的内容,那么您可能需要实现一个定制过滤器,并提取凭证并对其进行处理

身份验证机制的适用性也取决于它实际上由什么组成。通常,您的用户将具有分配的角色,这些角色在进行身份验证时加载,通常来自某种数据库。
hasRole
表达式只检查当前用户是否具有指定的角色。通常,您只需要创建一个
userdetails服务
,该服务以标准格式加载用户信息,该格式很容易插入到框架中。其他地方对此作了详细介绍。如果您真的需要在GAE上进行更多定制,那么集成将包括如何与更复杂的系统进行集成的详细信息

如果您使用
create session='stateless'
,Spring Security将被禁用

另外,您实际上不需要在URL级别和处理相同URL的控制器上都包含相同的安全属性