Spring Security文档显示:
“当您使用CSRF保护时?我们建议对正常用户可以通过浏览器处理的任何请求使用CSRF保护。如果您只创建非浏览器客户端使用的服务,则可能需要禁用CSRF保护。”
如果我的服务将被"浏览器"和"非浏览器"客户端(如第三方外部服务)使用,Spring Security是否提供了一种仅针对某些类型的客户端禁用CSRF的方法?
下面是我用来在appconfig security上的特定endpoint上禁用CSRF保护的内容。xml添加一个包含模式信息的节点,如以下示例所示:
<http security="none" pattern="/sku/*"/>
<http security="none" pattern="/sku/*/*"/>
<http security="none" pattern="/sku"/>
只要记住,如果要使用map all request,那么使用符号“*”的顺序很重要。
我的天哪,盒子里没有这样的东西。在你的情况下,我会做的是,有一个URL的层次结构,例如,植根于/api
,这将免除csrf。它很容易配置。在XML配置中,有一个普通的
<http pattern="/api/**">
...
<!-- csrf -->
</http>
由于它是第一个,任何对
/api
层次结构的请求都会触发它,而不使用csrf,所有其他请求都会使用它。
在应用程序的正常部分,您永远不会使用
/api/**
url,并将它们保留给非浏览器使用。
然后在控制器中,将它们映射到其正常url和
/api
下的副本:
@Controller
@RequestMapping({ "/rootcontrollerurl", "/api/rootcontrollerurl"})
class XController {
@RequestMapping(value = "/request_part_url", ...)
public ModelAndView method() {
...
}
}
(当然,
rootControlerurl
和request_part_url
可能是空白的...)
但您必须分析允许非csrf控制的请求的安全含义,并最终将控制器从
/api
层次结构中排除。
我相信在Spring Security XML中有一种方法可以做到这一点,但是由于我使用的是Java配置,下面是我的解决方案。
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Configuration
@Order(1)
public static class SoapApiConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/soap/**")
.csrf().disable()
.httpBasic();
}
}
@Configuration
public static class WebApiConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginProcessingUrl("/authentication")
.usernameParameter("j_username")
.passwordParameter("j_password").permitAll()
.and()
.csrf().disable()
}
}
}
我有一个Spring Boot REST API。由于安全策略,我需要为浏览器访问的endpoint启用CSRF保护。但是,非浏览器也可以访问此API。有没有一种方法可以创建两组endpoint,一个只能由启用CSRF的浏览器访问,另一个只能由禁用CSRF的非浏览器访问?
一面-2023年5月6日 ios客户端,大前端、object-c 自我介绍。有点背稿的感觉。 聊一个项目。说了OSG的项目。提到内存管理。 开始八股。内存:只能指针。 多态,静态、动态。模板、虚函数。静态的除了模板还有啥。析构函数为什么要添加虚函数。 空类size的大小。 struct/class的区别。 堆/栈/BSS几个内存类别 TCP四次挥手。 ipv4地址空间这么小怎么够用,NAT。用同一
二面-2023年5月8日 第一次迟到了面试.. 自我介绍。刚开始没准备各种结巴,语言不顺。整体还是讲完了。 项目。疯狂问项目、但是又不是挖,就是让自己讲。讲了好几个项目。看起来不是特别满意。一个是我自己准备项目拿普通横向项目准备的亮点肯定不够不到位,另外岗位是客户端,没有什么相关的。 岗位匹配度上,问了好几遍和原技术栈不匹配,自己的个人想法。(一开始也是你捞的我,我有啥想法 手撕算法。快排。这两面
我对硒很陌生。我开发了一个应用程序,使用一个selenium web驱动程序来做网页上的一些动作。当我在本地运行时,它可以很好地工作,也就是说,它在我的机器中启动了一个浏览器。我在VM服务器上部署了这个应用程序,所以脚本在服务器上运行(在VM Ware机器中启动的浏览器),而不是在客户端。谁能帮助我如何在客户端启动浏览器?
问题内容: 如何禁用浏览器的“后退”按钮(跨浏览器)? 问题答案: 这个问题是非常相似,这一个 … 您需要强制缓存过期才能正常工作。将以下代码放在页面代码后面。
免责声明:我知道这个问题有重复(一、二、三),但是: null 我的代码: 这将打印: (所有3个请求返回200个http代码) 我有JVM选项: (在我的keystore.jks中添加了vk.com证书) 下面是http-client的内部日志 当然,上面的测试是在关闭内部日志记录的情况下执行的,因为它会给每个请求增加大约50毫秒的额外时间。 我已经读了三遍所有的apache http-clie