我在我的应用程序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授权键”或任何适合该场景的内容。
解决这个问题的可能办法是什么?
标题
发布于 2012-08-16 12:23:34
您可能应该阅读有吗?上的描述,然后删除它以禁用form-login。如果您专门配置要使用的内容,您的配置将更加清晰。
从您的问题中不清楚您希望在x-authorization-key头中包含哪些内容。如果您只是使用客户端Id和共享机密进行身份验证,那么您也可以使用基本身份验证,因为它已经被开箱即用,您只需将<http-basic />添加到您的配置中即可。如果您有一些更定制的内容,那么您可能需要实现一个自定义过滤器和将其添加到Spring安全筛选链中来提取凭据并对其进行处理。
您的身份验证机制是否适合,也取决于它的实际组成。通常,您的用户将有分配的角色,这些角色在身份验证时加载,通常是从某种数据库中加载的。hasRole表达式只检查当前用户是否具有指定的角色。通常,您只需要创建一个UserDetailsService,它以标准格式加载用户信息,该格式很容易插入到框架中。这一问题在其他地方得到了详细的讨论。如果您真的需要更多定制的这篇博客文章,那么GAE集成包括您如何与更复杂的系统集成的详细信息。
如果使用不创建或使用会话,Security将是create-session='stateless'。
实际上,您不需要在URL级别和处理相同URL的控制器上都包含相同的安全属性。
https://stackoverflow.com/questions/11985709
复制相似问题