我在我的应用程序Spring控制器中实现了Spring Security Expression:
@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“或适用于该场景的任何内容。
可能的解决办法是什么?
头
答案 0 :(得分:8)
您应该阅读what auto-config
does上的说明,然后将其删除以禁用form-login
。如果您专门配置要使用的内容,您的配置将更加清晰。
从您的问题中不清楚您希望将哪些内容包含在x-authorization-key
标题中。如果您只是使用客户端ID和共享密钥进行身份验证,那么您也可以使用基本身份验证,因为它已经开箱即用,您只需将<http-basic />
添加到您的配置中即可。如果您有更多自定义的内容,那么您可能必须实现自定义过滤器并add it to the Spring Security filter chain来提取凭据并处理它们。
您的身份验证机制如何适合也取决于它实际包含的内容。通常,您的用户将分配在进行身份验证时加载的角色,通常来自某种类型的数据库。 hasRole
表达式只检查当前用户是否具有指定的角色。通常,您只需要创建一个UserDetailsService
,它以标准格式加载您的用户信息,该格式很容易插入到框架中。这在其他地方详细介绍。如果您真的需要更多自定义的this blog article GAE集成,请详细说明如何与更复杂的系统集成。
create-session='stateless'
,Spring Security将not create or use a session。
P.S。您并不需要在URL级别和处理相同URL的控制器上包含相同的安全属性。