2 回答

TA貢獻1775條經驗 獲得超11個贊
要么有另一種未用@PreAuthorize
調度程序調用的方法進行注釋的方法。將實現移動到這個新方法中,并改變現有loadSMS
的使用這個新方法,以減少代碼重復。否則你可以在運行時添加一個角色,但我認為這不是一個好主意。

TA貢獻1821條經驗 獲得超6個贊
你可以試試下面的代碼
@Service
class SchedulerService {
@Autowired
private YourService service;
@Scheduled(fixedRate = 600000L, initialDelay = 60000L)
public void executeTask() throws IOException {
RunAs.runAsAdmin(() -> {
service.loadSMS(String additionalPath) {
});
}
}
public class RunAs {
@FunctionalInterface
public interface RunAsMethod {
default void run() {
try {
runWithException();
} catch (Exception e) {
}
}
void runWithException() throws Exception;
}
public static void runAsAdmin(final RunAsMethod func) {
final AnonymousAuthenticationToken token = new AnonymousAuthenticationToken("adminUser", "adminPassword",
ImmutableList.of(new SimpleGrantedAuthority("ROLE_ADMIN")));
final Authentication originalAuthentication = SecurityContextHolder.getContext().getAuthentication();
SecurityContextHolder.getContext().setAuthentication(token);
func.run();
SecurityContextHolder.getContext().setAuthentication(originalAuthentication);
}
}
添加回答
舉報