首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用@WithMockUser的Rest保证测试适用于GET请求,但不适用于POST (403错误)

使用@WithMockUser注解可以在测试中模拟一个已认证的用户,以便进行权限相关的测试。该注解可以用于GET请求的测试,但对于POST请求可能会导致403错误。

403错误表示服务器理解请求,但拒绝执行它,通常是由于权限不足引起的。在使用@WithMockUser注解时,它会模拟一个已认证的用户,但并不会模拟用户的权限。对于GET请求,由于通常不涉及修改数据或执行敏感操作,因此可以使用@WithMockUser进行测试。但对于POST请求,由于可能会修改数据或执行敏感操作,需要确保用户具有足够的权限才能执行。

为了解决POST请求中的403错误,可以采取以下几种方法:

  1. 使用@WithMockUser注解时,通过设置用户的权限来模拟具有足够权限的用户。可以在注解中使用authorities属性来指定用户的权限,例如:@WithMockUser(authorities = "ROLE_ADMIN")。
  2. 在测试方法中,使用Spring Security的MockMvcRequestBuilders工具类构建POST请求时,可以使用with(csrf())方法添加CSRF令牌,以确保请求是经过CSRF保护的。例如:
代码语言:txt
复制
import static org.springframework.security.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.security.test.web.servlet.request.MockMvcRequestBuilders.with;
import static org.springframework.security.test.web.servlet.response.MockMvcResultMatchers.status;

...

mockMvc.perform(post("/api/endpoint")
        .with(csrf())
        .contentType(MediaType.APPLICATION_JSON)
        .content(jsonPayload))
        .andExpect(status().isOk());
  1. 如果需要进行更复杂的权限测试,可以使用Spring Security的@WithMockUser和@WithUserDetails注解结合使用。@WithUserDetails注解可以指定一个已存在的用户,包括其权限信息。例如:
代码语言:txt
复制
@WithUserDetails(value = "admin", userDetailsServiceBeanName = "myUserDetailsService")
public void testPostRequestWithAdminUser() {
    // Perform POST request and assert the response
}

在上述示例中,"admin"是一个已存在的用户,通过userDetailsServiceBeanName属性指定了用户详情服务的Bean名称。

总结起来,使用@WithMockUser的Rest保证测试适用于GET请求,但对于POST请求可能会导致403错误。为了解决这个问题,可以通过设置用户的权限、添加CSRF令牌或结合使用@WithMockUser和@WithUserDetails注解来进行测试。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python测试开发django-61.权限认证(permission)

基本身份验证通常仅适用于测试 TokenAuthentication 此身份验证方案使用基于令牌的简单HTTP身份验证方案。令牌认证适用于客户端 - 服务器设置,例如本机桌面和移动客户端。...SessionAuthentication 此身份验证方案使用Django的默认会话后端进行身份验证。会话身份验证适用于与您的网站在同一会话上下文中运行的AJAX客户端。...当权限检查失败时,将根据以下规则返回HTTP 403 Forbidden或HTTP 401 Unauthorized: 如果收到的请求身份验证通过,但是权限验证失败,则返回HTTP 403 Forbidden...; 如果收到的请求身份验证失败,且最高优先级验证类不能使用WWW-Authenticate请求头,则返回HTTP 403 Forbidden; 如果收到的请求身份验证失败,且最高优先级验证类可以使用WWW-Authenticate...IsAuthenticatedOrReadOnly 表示仅仅允许身份验证通过的用户访问,或者只允许只读请求(GET请求)访问。

2K40

RESTFUL API 安全设计指南

rest api接口一般会用到GET,POST,PUT,DELETE,未实现的方法则直接返回方法不允许,对于POST,PUT方法的数据采用json格式,并且在进入逻辑前验证是否json,不合法返回json...('api.requests_per_hour')) { App::abort(403, 'Hourly request limit exceeded'); } }); 七、错误处理 对于非法的,导致系统出错的等请求都进行记录...有一个统一的出错接口,对于400系列和500系列的错误都有相应的错误码和相关消息提示,如401:未授权;403:已经鉴权,但是没有相应权限。...九、其他注意事项 (1)请求数据,对于POST,DELETE方法中的数据都采用json格式,当然不是说rest架构不支持xml,由于xml太不好解析,对于大部分的应用json已经足够,近一些的趋势也是json...(4)在传输过程中,采用SSL保证传输安全。 (5)存储安全,重要信息加密存储,如认证信息hash保存。 总之,尽量使用SSL。

1.6K20
  • Restful API设计规范

    RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。...RESTFUL特点包括: 1、每一个URI代表1种资源; 2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源...400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。...401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。...410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

    1.4K30

    REST API安全设计指南

    /api/orders GET 获取某个特定资源的信息 http://xx.com/api/orders/123 POST 创建新资源 http...REST api 接口一般会用到 GET、POST、PUT、DELETE,未实现的方法则直接返回方法不允许,对于 POST、PUT 方法的数据采用 json 格式,并且在进入逻辑前验证是否 json,不合法则返回...('api.requests_per_hour')) { App::abort(403, 'Hourly request limit exceeded'); } }); 7 错误处理 对于非法的、导致系统出错的等各种请求进行记录...有一个统一的出错接口,对于 400 系列和 500 系列的错误都有相应的错误码和相关消息提示,如 401:未授权;403:已经鉴权,但是没有相应权限。...请求数据,对于 POST、DELETE 方法中的数据都采用 json 格式,当然不是说 rest 架构不支持 xml,由于 xml 不太好解析,对于大部分的应用,json 已经足够。

    2K20

    那些年,我们一起误解过的REST

    author=Fielding 3) 请求方法 REST约定用GET/POST/PUT/DELETE等请求方法来进行CURD操作。...但是否使用了GET/POST/PUT/DELETE,并不能作为评判一个系统是否符合REST架构风格的标准。...例如,有些系统所有接口都使用GET和POST方法,如果该系统只提供查询和创建操作,那么可能是符合REST架构风格的;但如果该系统还提供修改、删除操作,则该系统不符合REST架构风格。...有些人认为GET/POST/PUT/DELETE跟CURD是一对一的关系,其实不是。 具体的说,各请求方法如下: GET:用于查询资源。 POST:用于创建资源。...只要使用了规范的REST架构风格,那么就可以根据HTTP的标准,做出明确的相应处理,无需另外制定私有协议了。既减少了私有协议的兼容性问题,又能作为标准适用于所有的RESTful架构。

    2.1K173

    【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口

    RESTFUL特点包括: 每一个URI代表1种资源; 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源...表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE] 用户删除数据成功 400 INVALID REQUEST - [POST/PUT/PATCH] 用户发出的请求有错误...,服务器没有进行新建或修改数据的操作,该操作是幂等的 401 Unauthorized - [*] 表示用户没有权限(令牌、用户名、密码错误) 403 Forbidden - [*] 表示用户得到授权(...,服务器没有该方法 406 Not Acceptable - [GET] 用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式) 410 Gone -[GET] 用户请求的资源被永久删除,...服务器发生错误,用户将无法判断发出的请求是否成功

    53720

    RESTful简介

    400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。...401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。...410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。...500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功 错误处理 状态码是4xx,就应该向用户返回出错信息。...开发中使用还是不是使用,看适合自己的业务就是最好的。

    88820

    Spring Security 实战干货:Spring Security中的单元测试

    没问题,有写单元测试的觉悟,写的代码质量肯定有保证,对代码质量重视的态度,这种忙一定要帮!...标记到整个测试类上,这样每个测试都将使用指定该用户。...@WithAnonymousUser @WithAnonymousUser是用来模拟一种特殊的用户,也被叫做匿名用户。如果有测试匿名用户的需要,可以直接使用该注解。...总结 今天介绍了当你的应用中集成了Spring Security时如何单元测试,我们可以使用提供的模拟用户的注解,也可以模拟加载用户,甚至你可以根据自己的需要来定制化。...其实如果你使用了JWT的话还有种野路子,你可以在Spring MVC Mock测试中加入对应的请求头或者参数,也能顺利进行。好了今天的分享就到这里,多多关注:码农小胖哥 分享更多的编程知识干货。

    2.8K40

    赏心悦目的RESTful API这样来设计!

    ,但是不能快速从接口 URL 的定义中明确该接口的含义,需要进一步读代码确认 URL中的英文单词使用五花八门,搜索某个接口不知道具体的关键字 请求方法动词如 POST GET 随意使用 完成当前业务接口对接...,动词一律大写,另外根据RESTful 幂等性(多次调用是否会对资源产生影响)原则,我们不能乱用动词,GET/PUT/DELETE 是幂等的,POST/PATCH 不是幂等的 有些客户端只能使用 GET...这时,客户端发出的 HTTP 请求,要加上 X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖 POST方法。...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式 这里要注意状态码 401 和 403 的区别 5xx 状态码 5xx 状态码表示服务端错误,通常只会用到两个: 500InternalServerError...中, 这种形式很显然不适用于现在分布式微服务架构的模式,我们可以使用 JWT (JSON Web Token) 如 OAuth2 来实现,这样每次在 Httpheader 中添加 token 来做验证即可

    1.4K10

    在 REST 服务中支持 CORS

    重要提示:默认 CORS 标头处理不适用于处理机密数据的 REST 服务。接受 CORS 标头要指定 REST 服务接受 CORS 标头:修改规范类以包含 HandleCorsRequest 参数。...此用户应具有 REST 服务使用的任何数据库的 READ 权限;如果没有,服务将响应 HTTP 404 错误。...为此,检查默认使用的方法是有用的,即 %CSP.REST 的 HandleDefaultCorsRequest() 方法。本节说明此方法如何处理源、凭据、标头和请求方法并提出变体建议。...可以使用此信息来编写 OnHandleCorsRequest() 方法。以下代码获取源并使用它来设置响应标头。一种可能的变体是根据允许列表测试来源。然后域被允许,设置响应头。...代码应测试是否允许标头和请求方法。如果允许,请使用它们来设置响应标头。如果不是,请将响应标头设置为空字符串。

    2.6K30

    如何设计出优秀的Restful API?

    REST的概念是将API结构分离为操作和资源。使用HTTP方法GET、DELETE、POST和PUT操作资源。 设计糟糕的REST API = 浪费时间!...6 使用HTTP状态码 当客户端通过API向服务器发出请求时,客户端应该知道反馈,无论是失败,成功还是请求错误。 HTTP状态代码是一系列标准化代码,针对http请求的可能会发生的各种情况。...下面是Http状态码,可以合理利用处理各种请求反馈,将http自身的错误和服务器内部的错误,有一个很好的区分。 2xx(成功类别) 200 Ok表示GET,PUT或POST成功的标准HTTP响应。...401 Unauthorized表示不允许客户端访问资源,并应使用所需凭据重新请求。 403 Forbidden表示请求有效且客户端已通过身份验证,但不允许客户端出于任何原因访问该页面或资源。...- 6,使用HTTP自身的方法表示增删改查资源, GET:查询,POST:新增,PUT:更新,DELETE:删除 7,合理使用HTTP状态码,200,201,400,401,403,500。

    1.1K10

    如何设计好的RESTful API

    ,但是不能快速从接口 URL 的定义中明确该接口的含义,需要进一步读代码确认 URL中的英文单词使用五花八门,搜索某个接口不知道具体的关键字 请求方法动词如 POST GET 随意使用 完成当前业务接口对接...,动词一律大写,另外根据RESTful 幂等性(多次调用是否会对资源产生影响)原则,我们不能乱用动词,GET/PUT/DELETE 是幂等的,POST/PATCH 不是幂等的 有些客户端只能使用 GET...这时,客户端发出的 HTTP 请求,要加上 X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖 POST方法。...GET:200OK 请求成功 POST:201Created 创建成功 PUT:200OK 更新成功 DELETE:204NoContent 找不到要删除的内容 使用状态码 202 有时候会比 使用状态啊吗...同时在右侧工具栏打开 API,会自动生成 demoData 请求参数,实现快速调用测试: ?

    1.7K20

    180815-Spring之RestTemplate中级使用篇

    Spring之RestTemplate中级使用篇 前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景...,却没有提及可以怎么做,这一篇则相当于进阶版,将主要介绍 get/post请求如何携带 header post传文件可以怎么玩, post提交json串怎么处理 exchange方法的使用姿势 Post请求 当然get请求使用的这种姿势,对于post而言或者对于其他的http请求方法而言,都是通用的,而对于post请求来说,还有另外一种方式,就是requset参数,可以携带request headers...当你写一个公共的Rest工具类时,就比较方便了,底层统一,具体的方法由上层业务方选择即可 get可以通过这种方式直接添加请求头(也就是不需要第一种case中的自定义拦截器来塞入header,显然更加灵活...其他 初级篇介绍了如何使用RestTemplate发起简单的GET/POST请求; 中级篇则介绍请求的过程中添加设置请求头,以及某些特殊的请求可以怎么处理 显然还会有高级篇,除了上面的东西,我们还需要知道些什么呢

    73220

    10.6K star,一款开源HTTP测试工具,适合新手,简单、容易上手!

    1、项目介绍 Hurl是一个使用Rust语言开发的命令行工具,它允许用户运行以简单纯文本格式定义的HTTP请求。这个工具不仅适用于获取数据,还非常适合用于测试HTTP会话和API。...项目地址: https://github.com/Orange-OpenSource/hurl Hurl的主要特性和用途包括但不限: 请求发送与捕获:Hurl可以发送HTTP请求,并捕获响应中的值。...用户可以使用XPath和JSONPath等多种查询方式,以满足不同的测试需求。...适用于多种场景:Hurl不仅适用于REST/JSON API的测试,还适用于HTML内容、GraphQL以及SOAP API等多种场景。...第二个GET请求使用了前面捕获的token变量作为Authorization头的值,用于后续的认证。 执行命令后,Hurl会按照顺序执行两个请求,并在第二个请求中使用第一个请求的响应数据。

    38410

    Spring之RestTemplate中级使用篇

    [logo] Spring之RestTemplate中级使用篇 前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景...,却没有提及可以怎么做,这一篇则相当于进阶版,将主要介绍 get/post请求如何携带 header post传文件可以怎么玩, post提交json串怎么处理 exchange方法的使用姿势 Post请求 当然get请求使用的这种姿势,对于post而言或者对于其他的http请求方法而言,都是通用的,而对于post请求来说,还有另外一种方式,就是requset参数,可以携带request headers...,使用姿势和get/post没有什么区别,只是可以由调用发自己来选择具体的请求方法 使用exchange对上面的post请求进行简单的替换如下, 基本上除了多一个参数之外没有什么区别了 @Test public...当你写一个公共的Rest工具类时,就比较方便了,底层统一,具体的方法由上层业务方选择即可 get可以通过这种方式直接添加请求头(也就是不需要第一种case中的自定义拦截器来塞入header,显然更加灵活

    2.6K10

    REST API 安全设计指南

    rest api接口一般会用到GET,POST,PUT,DELETE,未实现的方法则直接返回方法不允许,对于POST,PUT方法的数据采用json格式,并且在进入逻辑前验证是否json,不合法返回json...7、错误处理 对于非法的,导致系统出错的等请求都进行记录,一些重要的操作,如登录,注册等都通过日志接口输出展示。...有一个统一的出错接口,对于400系列和500系列的错误都有相应的错误码和相关消息提示,如401:未授权;403:已经鉴权,但是没有相应权限。如不识别的url: ? 错误的请求参数 ?...9、其他注意事项 (1)请求数据,对于POST,DELETE方法中的数据都采用json格式,当然不是说rest架构不支持xml,由于xml太不好解析,对于大部分的应用json已经足够,近一些的趋势也是json...(4)在传输过程中,采用SSL保证传输安全。 (5)存储安全,重要信息加密存储,如认证信息hash保存。 总之,尽量使用SSL。

    3.4K80

    API OWASP 标准

    HTTP 状态码 404 用于错误的 URL 400 -responses 有特定错误的附加信息(例如缺少必需的属性) 当 API 使用者使用错误的凭证时使用 401 -response 403 使用有效但请求...API 使用者无法访问的端点或尝试使用他们不允许执行的操作 500 - 当存在 API 使用者无法通过更改请求来解决的内部处理问题时响应 500 -responses 具有特定于应用程序的错误代码...,但不是关于确切错误(堆栈跟踪或错误文本)的非常清晰的普通消息,这可能会将内部实现暴露给 API 使用者 GET: 200 OK 和 items -array 作为空数组 GET:204 空响应,正文中没有任何内容...规范包含标准格式的请求和响应示例,API 文档根据规范、模式和示例自动生成 POST, PUT: 201 为创建新资源而创建 来自客户端的 400 个错误请求,例如缺少必需的查询参数 白名单:POST、...PUT 和 DELETE 仅适用于 API 使用者可以操作的资源?

    2.6K20

    DRF对Django请求响应做了技术升级

    Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优化改造...它们提供了一些新功能,比如: 检查请求是Request对象 添加上下文到Response对象 返回请求错误如405 Method Not Allowed 当request.data格式有误时,抛出ParseError...', 'POST']) 使用了状态码标识符,如: status.HTTP_404_NOT_FOUND 使用request.data替代了 data = JSONParser().parse(request...东方说 最近测试开发和业务测试的话题频频出现在TesterHome论坛上,讨论激烈,我觉得从公司的角度来说,只会关注员工的产出有没有给公司带来价值,无论技术多厉害,不能创造价值终究是会优先被裁的。...从个人的角度来说,只会业务测试的出路肯定是会越来越窄的,努力提高技术,辅助业务测试,同时提升效率,才是更好的发展方向。

    93120

    restful api接口规范和服务调用的区别_rest接口规范

    REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。...过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4,尽量使用查询参数代替路径中的实体导航,如GET /animals?...安全性 幂等性 GET √ √ POST × × PUT × √ DELETE × √ 安全性和幂等性均不保证反复请求能拿到相同的response。...错误处理 不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求; 正确设置http状态码,不要自定义; Response body 提供 1) 错误的代码(日志/问题追查);2) 错误的描述文本...“服务器端错误,请稍后再试”,开发或测试环境中用异常的 stacktrace,服务器端提供该行为的开关。

    1.8K10
    领券