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

Spring Security绕过如果有不同的授权头

闻飞跃
2023-03-14

我已经用jwt实现了Spring Security性,并且运行良好。

@Configuration
@Component
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomJWTProvider jwtTokenProvider;

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .httpBasic().disable()
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/health").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(new CustomJwtConfigurer(jwtTokenProvider));

    }

    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**");
    }
}
@Component
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterchain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String authToken = httpRequest.getHeader("Authorization");
        if(myCustomValidator(authToken)){
            //if this is true it should skip spring security jwt token verification
            //which is in configure phase
        }else{
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.sendError(403, "Access denied");
        }
        System.out.println("authToken="+authToken);
        filterchain.doFilter(request, response);
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void destroy() {}
}

共有1个答案

龙安阳
2023-03-14

可以使用OncePerRequestFilter。您需要创建一个类,并在重写它的方法(doFilterInternal)的地方扩展这个类,并将逻辑放在那里。

您可以如下所示配置该筛选器。

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class YourClass extends WebSecurityConfigurerAdapter {
        @Autowired
        private YourFilter authFilter;
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.addFilterAt(authFilter, UsernamePasswordAuthenticationFilter.class);
        }
    }
 类似资料:
  • 综述 这类测试注重于验证每个角色或访问限制文件的特权的授权模式是否良好实现。 对于评估中测试者拥有的每个不同角色,每个功能函数和应用在完成认证环节后的请求,都需要被验证: 未认证用户是否可以访问资源? 登出后是否可以访问资源? 不同角色或权限的用户是否可以访问功能函数和资源? 尝试用管理员用户来访问应用并追踪记录所有的管理功能。 普通权限用户是否可以访问管理功能? 那些拥有不同权限的用户是否可以使

  • 我想为我的融合 kafka 添加身份验证和授权,这些Kafka与 docker 一起运行。这应该只发生在端口9093上,9092应该像以前一样工作,因为IP表规则阻止了外部客户端的端口。因此,我使用了以下配置: = 以下是我配置的一部分: Kafka容器环境变量 Zookeeper容器环境变量 由于我只想为SASL_SSL侦听器配置身份验证机制,因此我使用以下jaas配置,如下所述:https:/

  • http://${host}:${port}/auth/realms/${realm_name}/authz/protection/resource_set 但是我没有看到一个API来CRUD授权策略和权限。 我试图通过protection/resource_setendpoint创建策略,但失败了:

  • 我决定第一次尝试实现微服务架构,而不是单一架构,并遇到了授权问题。在一个整体架构中,当访问挂有[Authorize]属性的控制器时,我只是在头中传递令牌,并对照当前的单个数据库检查它。但是在微服务架构中,每个微服务都有自己的数据库,你如何在访问其他微服务时检查令牌,我听说过API Gateway中的check的实现,但我认为,无论如何,每个微服务都应该有自己的check,因为,如果用户没有被授权,

  • 我正在开发一个应用程序内购买,所以我想知道订阅是否过期。我已经获得了RefreshToken和AccessToken,但是当我试图根据此获取订阅信息时,我总是得到相同的错误:{“错误”:{“错误”:[ {“域”:“全局”, “原因”:“autherror”, “消息”:“无效凭据”, “位置类型”:“头”, “位置”:“授权”}], “代码”:401, “消息”:“无效凭据”}}

  • 我们使用Spring Security OAuth2保护我们的REST服务(用于服务器到服务器通信,不涉及用户)。但是,当您尝试访问浏览器中的受保护资源时,它将显示: 我们希望这是我们自己选择的自定义页面。有办法吗? 设置“拒绝访问”页面不起作用。首先,它需要定义一个登录页面,我们没有,因为这是一个纯服务器到服务器的通信。另一个原因是,这个属性自Spring 3.0..或类似的版本以来就被弃用了。