如何使用 jhipster 8.4.0 允许公共访问(无需身份验证)api

问题描述 投票:0回答:1
我在一个 Angular 项目中使用 jhipster 8.4.0

我希望应用程序将注册期间在用户注册屏幕上输入的用户作为参数提供给 API,该 API 由用户搜索帐户并找到,返回帐户激活状态(true/false)。

忽略流程,问题是...登录到应用程序,服务通过 swagger 正常工作并返回预期的内容,但是当我执行测试时通过邮递员,它仅在我提供不记名令牌时才有效,但我需要该 API 能够被未经身份验证的用户使用,而不仅仅是经过身份验证的用户。

.authorizeHttpRequests( authz -> // prettier-ignore authz .requestMatchers(mvc.pattern("/account/activated/**")).permitAll() .requestMatchers(mvc.pattern("/account/activated/{login}")).permitAll()
同样,在我的 AccountResource.java 中,我插入了 @PermitAll 注释:

@PermitAll @GetMapping("/account/activated/{login}") public boolean getActivationStatusByLogin(@PathVariable String login) { Optional<User> user = userRepository.findOneByLogin(login); return user.map(User::isActivated).orElseThrow(() -> new AccountResourceException("User with login " + login + " not found")); }
记住邮递员让我通过网址执行

http://localhost:8080/api/account/activated/string-do-login-consultado


事实证明,我无事可做,只收到状态 401 - 未经授权。

例如 Postman,如果我添加不记名令牌,它的工作方式与我登录并使用应用程序的 swagger 测试 api 时的工作方式完全相同。

我还需要做什么才能公开这项服务,我已经测试了我所知道的一切,所以开发界的明智奇才,请帮助这个蚱蜢。

java spring jhipster
1个回答
0
投票
Spring Security 5 默认允许未指定的路径,而 Spring Security 6 默认拒绝未指定的路径。如果您创建一个映射到

FooController

 的新 
/foo
,则必须在 
SpaWebFilter
SecurityConfiguration
 中允许它。例如:

package com.mycompany.myapp.web.rest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class FooController { @GetMapping("/foo") public String foo(@RequestParam(value = "name", required = false) String name) { return String.format("Hello %s", name != null ? name : "World"); } }
SpaWebFilter.java:

public class SpaWebFilter extends OncePerRequestFilter { /** * Forwards any unmapped paths (except those containing a period) to the client {@code index.html}. */ @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // Request URI includes the contextPath if any, removed it. String path = request.getRequestURI().substring(request.getContextPath().length()); if ( !path.startsWith("/foo") && !path.startsWith("/api") && !path.startsWith("/management") && !path.startsWith("/v3/api-docs") && !path.contains(".") && path.matches("/(.*)") ) { request.getRequestDispatcher("/index.html").forward(request, response); return; } filterChain.doFilter(request, response); } }
安全配置.java:

.requestMatchers(mvc.pattern("/foo")).permitAll()
如果要使用

@PermitAll()

,则必须将
jsr250Enabled = true
添加到
@EnableMethodSecurity
。请参阅 
https://docs.spring.io/spring-security/reference/servlet/authorization/method-security.html#use-jsr250 了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.