首页
学习
活动
专区
工具
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、客户端使用GETPOST、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 接口一般会用到 GETPOST、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 已经足够。

    1.9K20

    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,就应该向用户返回出错信息。...开发中使用还是不是使用,看适合自己业务就是最好

    88020

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

    RESTFUL特点包括: 每一个URI代表1种资源; 客户端使用GETPOST、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] 用户请求资源被永久删除,...服务器发生错误,用户将无法判断发出请求是否成功

    53220

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

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

    2.1K173

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

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

    2.7K40

    赏心悦目的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

    如何设计出优秀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

    REST 服务中支持 CORS

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

    2.6K30

    如何设计好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.6K20

    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会按照顺序执行两个请求,并在第二个请求使用第一个请求响应数据。

    30610

    180815-Spring之RestTemplate中级使用

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

    72420

    Spring之RestTemplate中级使用

    [logo] Spring之RestTemplate中级使用篇 前面一篇介绍了如何使用RestTemplate发起postget请求,然而也只能满足一些基本场景,对于一些特殊的如需要设置请求头,添加认证信息等场景...,却没有提及可以怎么做,这一篇则相当于进阶版,将主要介绍 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.3K80

    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论坛上,讨论激烈,我觉得从公司角度来说,只会关注员工产出有没有给公司带来价值,无论技术多厉害,不能创造价值终究是会优先被裁。...从个人角度来说,只会业务测试出路肯定是会越来越窄,努力提高技术,辅助业务测试,同时提升效率,才是更好发展方向。

    92420

    python测试开发django-60.token登录(TokenAuthentication)

    前言 现在很多接口项目在登录时候返回一个token,登录后拿着这个token去访问访问登录之后请求。...基本身份验证通常仅适用于测试 TokenAuthentication 此身份验证方案使用基于令牌简单HTTP身份验证方案。 令牌认证适用于客户端 - 服务器设置,例如本机桌面和移动客户端。...SessionAuthentication 此身份验证方案使用Django默认会话后端进行身份验证。 会话身份验证适用于与您网站在同一会话上下文中运行AJAX客户端。...(APIView): '''登录方法''' def post(self, request, *args, **kwargs): username = request.data.get...token 接着测试登录返回token接口,使用post请求请求类型Content-Type: application/json ?

    3K30
    领券