第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為具有特定請(qǐng)求標(biāo)頭的請(qǐng)求切換 Spring Security

為具有特定請(qǐng)求標(biāo)頭的請(qǐng)求切換 Spring Security

白板的微信 2021-06-08 17:27:35
我正在嘗試為所有具有特定 Request Header的請(qǐng)求切換/繞過(guò)/禁用 Spring Security(身份驗(yàn)證和授權(quán))。例如,如果請(qǐng)求 url 被該請(qǐng)求頭命中,則應(yīng)繞過(guò) Spring Security,否則不應(yīng)繞過(guò)。為此,我使用以下requestMatchers Spring Security 配置:@Override  public void configure(WebSecurity web) throws Exception {    web.ignoring()        .antMatchers(HttpMethod.GET)        .antMatchers(HttpMethod.OPTIONS)        .requestMatchers(new RequestHeaderRequestMatcher("TEST-HEADER","TEST-VALUE"));  }我剩下的安全配置是:@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity (prePostEnabled = true)@ConditionalOnProperty (name = "security.enabled", havingValue = "true", matchIfMissing = true)public class SecurityConfig extends WebSecurityConfigurerAdapter {  @Autowired  private SecurityProps securityProps;  @Autowired  private MyUserDetailsService myUserDetailsService;  @Autowired  private MyAuthenticationEntryPoint myAuthenticationEntryPoint;  @Autowired  private MyCORSFilter myCORSFilter;  public SecurityConfig() {    SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);  }  @Override  protected void configure(HttpSecurity http) throws Exception {    http.sessionManagement()        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)        .and()        .csrf().disable()        .addFilterBefore(myCORSFilter, SessionManagementFilter.class)        .addFilterBefore(requestHeaderFilter(), RequestHeaderAuthenticationFilter.class)        .authenticationProvider(preauthAuthProvider())        .authorizeRequests()          .antMatchers(HttpMethod.GET, securityProps.getNoAuthGetPattern()).permitAll()          .antMatchers(HttpMethod.OPTIONS, securityProps.getNoAuthOptionsPattern()).permitAll()          .requestMatchers(new RequestHeaderRequestMatcher("TEST-HEADER","TEST-VALUE")).permitAll()          .anyRequest().authenticated()        .and()        .exceptionHandling()        .authenticationEntryPoint(myAuthenticationEntryPoint);  }
查看完整描述

1 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

我認(rèn)為你的旁路工作正常。它跳過(guò)檢查。


安全的授權(quán)檢查部分從 SecurityContext 中獲取經(jīng)過(guò)身份驗(yàn)證的對(duì)象,當(dāng)請(qǐng)求通過(guò) spring 安全過(guò)濾器時(shí)將設(shè)置該對(duì)象。


因此,當(dāng)您跳過(guò)安全過(guò)濾器 SecurityContext 尚未設(shè)置因此錯(cuò)誤


你可以做這樣的事情來(lái)為你的自定義標(biāo)題案例手動(dòng)設(shè)置


try {

    SecurityContext ctx = SecurityContextHolder.createEmptyContext();

    SecurityContextHolder.setContext(ctx);

    ctx.setAuthentication(event.getAuthentication());

} finally {

    SecurityContextHolder.clearContext();

}

編輯1:


解答所有疑問(wèn)。


但如果是這樣,那么我猜所有 GET 調(diào)用也應(yīng)該失敗,但我的 GET 調(diào)用工作正常。


由于您添加了這一行,因此安全檢查會(huì)跳過(guò)所有 GET 調(diào)用。


.antMatchers(HttpMethod.GET, securityProps.getNoAuthGetPattern()).permitAll()

我在哪里可以添加你提到的代碼?任何特定的過(guò)濾器或其他地方?


我在過(guò)濾器中做過(guò)類似的事情。參考這里


看TokenAuthenticationFilterClass in Answer。在哪里手動(dòng)設(shè)置。


注意:它的 JWT 實(shí)現(xiàn)但很好參考


UserDetails userDetails = userDetailsService.loadUserByUsername(username);

if (tokenHelper.validateToken(authToken, userDetails)) {

    // create authentication

    TokenBasedAuthentication authentication = new TokenBasedAuthentication(userDetails);

    authentication.setToken(authToken);

    SecurityContextHolder.getContext().setAuthentication(authentication);

}

您的答案中的事件是什么?


我剛剛從 Some Answer 那里得到了那個(gè)案例,現(xiàn)在找不到它的鏈接。但你可以setAuthentication喜歡這個(gè)或喜歡上面


Authentication authentication = new PreAuthenticatedAuthenticationToken("system", null);

authentication.setAuthenticated(true);

context.setAuthentication(authentication);


查看完整回答
反對(duì) 回復(fù) 2021-06-10
  • 1 回答
  • 0 關(guān)注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)