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

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

如何使用 cors 和 spring security 修復(fù) Session bean

如何使用 cors 和 spring security 修復(fù) Session bean

守著星空守著你 2023-05-24 16:31:10
每次 localhost:4200(通過 cors 過濾器)向 localhost:8080 發(fā)出 http 請(qǐng)求時(shí),它會(huì)丟失保存身份驗(yàn)證的 sessionscope bean,這基本上使它無法通過 403 進(jìn)行所有調(diào)用。不包括第一個(gè) http 請(qǐng)求(不在后面)彈簧安全)我有一個(gè)在 localhost:8080 中運(yùn)行良好的 spring boot 應(yīng)用程序。我們正在其中創(chuàng)建一個(gè)角度 iframe,它也運(yùn)行良好(當(dāng)部署在 localhost:8080 上時(shí))但是當(dāng)我們?cè)?localhost:4200 (ng serve) 上執(zhí)行它時(shí)它不會(huì)工作它開始抱怨 cors 所以我有以下配置,除了我添加的關(guān)于 cors 的所有內(nèi)容。@Configuration@Profile({"dev"})@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class springDevConfig extends WebSecurityConfigurerAdapter {  @Override  protected void configure(HttpSecurity http) throws Exception{    http.csrf().disable();    http.headers().frameOptions().sameOrigin();    http.headers().cacheControl().disable();    http.cors().configurationSource(corsConfigurationSource())    .and().authorizeRequests().anyRequest().permitAll();  }  @Bean  public CorsConfigurationSource corsConfigurationSource(){    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();    CorsConfiguration configuration = new CorsConfiguration();    configuration.setAllowedOrigins(    ImmutableList.of("http://localhost:4200"));    configuration.setAllowedMethods(Arrays.asList(    RequestMethod.GET.name(),    RequestMethod.POST.name(),    RequestMethod.OPTIONS.name(),    RequestMethod.DELETE.name(),    RequestMethod.PUT.name()));    source.registerCorsConfiguration("/**", configuration);    return source;  }}我的會(huì)話 bean 相當(dāng)簡(jiǎn)單@Component@SessionScopepublic class UserSession {   //Holds the Authorities for the prePostEnabled   User user;    ...}為了初始化用戶,我向某個(gè)端點(diǎn)(未受保護(hù)的)發(fā)出請(qǐng)求并在代碼中執(zhí)行類似的操作...User user = new User(id, "", authorities);Authentication auth = new UsernamePasswordAuthenticationToken(user, null,authorities));SecurityContextHolder.getContext().setAuthentication(auth);Usersession.setUser(user);...當(dāng)我在 localhost:8080 上發(fā)出 http 請(qǐng)求時(shí),后續(xù)的 http 請(qǐng)求具有相同的會(huì)話。但是當(dāng)我嘗試從 localhost:4200 向 localhost:8080 發(fā)出請(qǐng)求時(shí),每個(gè)請(qǐng)求似乎都獲取了不同的 UserSession / 也許打開了一個(gè)新會(huì)話?(在所有受保護(hù)的端點(diǎn)上給我 403)真正發(fā)生了什么,為什么在向 localhost:8080 發(fā)出請(qǐng)求時(shí) localhost:4200 每次調(diào)用都會(huì)創(chuàng)建一個(gè)新會(huì)話?(應(yīng)該更改哪些配置來解決此類問題?)
查看完整描述

1 回答

?
慕容708150

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

您能否展示更多有關(guān)如何嵌入 iframe 以及為原始頁面提供什么服務(wù)的信息?

似乎正在發(fā)生的事情是您在沒有意識(shí)到的情況下有效地發(fā)出跨域請(qǐng)求。8080 和 4200 是不同的域,如果頁面的一部分從一個(gè)域加載,而部分頁面(即 iframe)從另一個(gè)域加載,則構(gòu)成跨域請(qǐng)求,并且一個(gè)域發(fā)送的 cookie 不會(huì)應(yīng)用于對(duì)該域的請(qǐng)求其他,因此不共享會(huì)話范圍。此外,如果您向加載原始頁面的域以外的域發(fā)出 Ajax 請(qǐng)求,除非您設(shè)置 CORS,否則默認(rèn)情況下它們會(huì)被拒絕。這解釋了為什么你必須這樣做。

您必須確保頁面的所有部分(包括 iframe 和 Ajax 請(qǐng)求)都是從同一域加載的,或者您有其他方法可以將會(huì)話附加到請(qǐng)求。通常,JSESSIONID cookie 用于此目的。此 cookie 是否在初始響應(yīng)中發(fā)送?

您通常有一個(gè)應(yīng)用程序服務(wù)于前端,包括初始頁面(例如 4200 上的應(yīng)用程序),以及一個(gè)僅響應(yīng) API 調(diào)用的應(yīng)用程序(例如 8080 上的應(yīng)用程序),并配置了 CORS。這樣所有對(duì)后端的調(diào)用都通過同一個(gè)域完成,并且 cookie 得到正常應(yīng)用。


查看完整回答
反對(duì) 回復(fù) 2023-05-24
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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