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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 @Scheduled 觸發(fā)時,在 SecurityContext 中未找到

當 @Scheduled 觸發(fā)時,在 SecurityContext 中未找到

ibeautiful 2023-11-10 16:44:58
我創(chuàng)建了一個Spring Boot應用程序,但在某些可以手動或通過@Scheduled注釋觸發(fā)的端點上遇到了問題。我遇到的問題如下:org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到身份驗證對象SecurityContext如果進程調(diào)用 via ,是否有辦法觸發(fā)@Scheduled?我是新手Spring Security,很難理解參考指南。我發(fā)現(xiàn)了一些類似的問題,但仍然無法理解如何將答案應用于我的案例。我的例子MyController:@Secured("ROLE_ADMIN")@RestController@RequestMapping(value = "/api")public class MyController {    @Scheduled(cron = "* * * * * *")    @GetMapping(path="/data")    public void getData() {        // Do some operations    }}
查看完整描述

2 回答

?
胡說叔叔

TA貢獻1804條經(jīng)驗 獲得超8個贊

基本上,您必須使用必要的身份驗證來配置您的調(diào)度程序。大致如下:


import com.google.common.collect.ImmutableList;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.scheduling.annotation.SchedulingConfigurer;

import org.springframework.scheduling.config.ScheduledTaskRegistrar;

import org.springframework.security.authentication.AnonymousAuthenticationToken;

import org.springframework.security.concurrent.DelegatingSecurityContextScheduledExecutorService;

import org.springframework.security.core.authority.SimpleGrantedAuthority;

import org.springframework.security.core.context.SecurityContext;


import java.util.List;

import java.util.concurrent.Executor;


import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;

import static org.springframework.security.core.context.SecurityContextHolder.getContext;


@Configuration

public class SchedulerConfiguration implements SchedulingConfigurer {


    private static final String KEY = "spring";

    private static final String PRINCIPAL = "spring";

    private static final List<SimpleGrantedAuthority> AUTHORITIES = ImmutableList.of(new SimpleGrantedAuthority("ADMIN"));


    @Override

    public void configureTasks(final ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.setScheduler(taskExecutor());

    }


    @Bean

    public Executor taskExecutor() {

        final AnonymousAuthenticationToken token = new AnonymousAuthenticationToken(KEY, PRINCIPAL, AUTHORITIES);

        final SecurityContext securityContext = getContext();

        securityContext.setAuthentication(token);

        return new DelegatingSecurityContextScheduledExecutorService(newSingleThreadScheduledExecutor(), securityContext);

    }

}

然后你可以用 注釋你的控制器@Secured("hasAuthority('ADMIN')")。


查看完整回答
反對 回復 2023-11-10
?
千萬里不及你

TA貢獻1784條經(jīng)驗 獲得超9個贊

方法@Scheduled不應該@Secured。預定的方法已經(jīng)在可信代碼中。


重構(gòu)你的代碼,例如


@Secured("ROLE_ADMIN")

@RestController

@RequestMapping(value = "/api")

public class MyController {


    @Autowired

    private MyService myService;


    @PostMapping(path="/run")

    public void runJobs() {

        myService.runJobs();

    }

}

@Service

public class MyService {


    @Scheduled(cron = "* * * * * *")

    public void runJobs() {

        // Do some operations

    }

}


查看完整回答
反對 回復 2023-11-10
  • 2 回答
  • 0 關(guān)注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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