当前位置: 首页 > 知识库问答 >
问题:

Spring boot+OAuth2安全和请求过滤器

越胤
2023-03-14

在内部,如果出现任何异常,/error将被重定向&这不需要通过OAuth2AuthenticationProcessingFilter,可以跳过此请求。

http.authorizeRequests().antMatchers("/error").permitAll().anyRequest().authenticated();
   // both configuration validates even "ERROR" request.
http.antMatcher("/**").authorizeRequests().antMatchers("/error").permitAll().anyRequest().authenticated();
// security config with filter 
    http.addFilterBefore(new APISignatureFilter(), OAuth2AuthenticationProcessingFilter.class).authorizeRequests().antMatchers("/error").permitAll().anyRequest().authenticated();

我已经实现了OncePerRequestFilter&任何请求都不会调用它。这必须在OAuth过滤器之前调用。

@Component
public class APISignatureFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
    }
 }

让我知道这个安全配置出了什么问题。

共有1个答案

席兴朝
2023-03-14

您需要从spring security实现AuthenticationEntryPoint接口

 @Component
 public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
 private static final Logger logger = 
 LoggerFactory.getLogger(JwtAuthenticationEntryPoint.class);
@Override
public void commence(HttpServletRequest httpServletRequest,
                     HttpServletResponse httpServletResponse,
                     AuthenticationException e) throws IOException, ServletException 
{
    logger.error("Responding with unauthorized error. Message - {}", e.getMessage());
    httpServletResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED,
            "Sorry, You're not authorized to access this resource.");
} 
}

您需要在Spring Security配置中定义这个入口点,例如

         http
            .cors()
                .and()
            .csrf()
                .disable()
            .exceptionHandling()
                .authenticationEntryPoint(//bean of 
           JwtAuthenticationEntryPoint)//

如果筛选器中出现任何异常,将调用

 类似资料:
  • 问题内容: 我有一个使用安全性约束来锁定对资源访问的Java Web应用程序。当Ajax请求需要身份验证时,我试图操纵HTTP 401响应,因此我创建了一个过滤器,该过滤器观察响应中的HTTP状态,并在需要时进行相应的修改。 问题是,如果需要身份验证,则直到将401发送到浏览器后,过滤器才会被调用。安全约束似乎在请求处理链中的过滤器之前。我的过滤器的url模式比任何安全约束都更通用。平台是WebS

  • 我有一个带有OAuth2授权和资源服务器的Spring引导设置。用户可以通过向发出POST请求来获取令牌。到目前为止,一切都很好。 但是,我不想通过基本auth保护,而是通过自定义安全过滤器。 一些简单的例子如何实现这一点将是非常有帮助的。谢谢!

  • 我希望我的服务只对传入的POST/PUT/DELETE请求执行身份验证,而对任何GET请求都绕过它。低于3.1的Spring版本具有“filters=“none”属性,可用于绕过特定URL模式的所有安全过滤器。在3.1中,不推荐使用“filters=“none”,替代解决方案是对“http”元素使用“security=“none”属性。这不支持基于传入的请求类型(GET/PUT/POST/DELE

  • 当我试图从spring boot应用程序访问OAuth HTTPSendpoint时,我得到了以下错误,但HTTPendpoint工作得非常好 错误: 安全java配置 POM文件

  • 我正在使用这个环境: Spring 4.0.5 Spring security 3.2.4 在我的环境中,我有一个SSO系统,我需要在这个系统中集成我的web应用程序。这个系统是私人产品。SSO机制的最终结果是在请求头中放置一个参数。所以我在申请中应该做的是: null 此场景类似于CAS集成场景;所以我从CAS集成着手;我写了我的自定义过滤器,我写了我的自定义入口点和处理请求所需的所有其他类,但

  • 在Jersey中,可以添加或 两者都是使用PackagesResourceConfig添加的: 谢谢