gpt4 book ai didi

java - Spring Security + Cas Auth + 允许静态用户列表

转载 作者:行者123 更新时间:2023-12-02 10:44:53 30 4
gpt4 key购买 nike

我的应用程序具有 spring 安全配置,连接到 cas 服务器(工作):

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Value("${cas.service-url}")
private String serviceUrl;

@Value("${cas.cas-url}")
private String casUrl;

@Autowired
private AuthenticationProvider authenticationProvider;

@Autowired
private AuthenticationEntryPoint authenticationEntryPoint;

@Autowired
private SingleSignOutFilter singleSignOutFilter;

@Autowired
private LogoutFilter logoutFilter;

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.regexMatchers("/secured.*")
.authenticated()
.and()
.authorizeRequests()
.regexMatchers("/")
.permitAll()
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint)
.and()
.addFilterBefore(singleSignOutFilter, CasAuthenticationFilter.class)
.addFilterBefore(logoutFilter, LogoutFilter.class);
}

@Override
protected AuthenticationManager authenticationManager() throws Exception {
return new ProviderManager(Arrays.asList(authenticationProvider));
}

@Bean
public CasAuthenticationFilter casAuthenticationFilter(ServiceProperties sP) throws Exception {
CasAuthenticationFilter filter = new CasAuthenticationFilter();
filter.setServiceProperties(sP);
filter.setAuthenticationManager(authenticationManager());
return filter;
}

@Bean
public ServiceProperties serviceProperties() {
ServiceProperties serviceProperties = new ServiceProperties();
serviceProperties.setService(serviceUrl);
serviceProperties.setSendRenew(false);
return serviceProperties;
}

@Bean
@Primary
public AuthenticationEntryPoint authenticationEntryPoint(ServiceProperties sP) {
CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint();
entryPoint.setLoginUrl(casUrl + "/login");
entryPoint.setServiceProperties(sP);
return entryPoint;
}

@Bean
public TicketValidator ticketValidator() {
return new Cas30ServiceTicketValidator(casUrl);
}

@Bean
public CasAuthenticationProvider casAuthenticationProvider() {
CasAuthenticationProvider provider = new CasAuthenticationProvider();
provider.setServiceProperties(serviceProperties());
provider.setTicketValidator(ticketValidator());
provider.setUserDetailsService((s) -> {
return new User(s, "fakepassword", true, true, true, true, AuthorityUtils.createAuthorityList("ROLE_ADMIN"));
});
provider.setKey("CAS_PROVIDER_IMPORT_PARCOURSUP_KEY");
return provider;
}

@Bean
public SecurityContextLogoutHandler securityContextLogoutHandler() {
return new SecurityContextLogoutHandler();
}

@Bean
public LogoutFilter logoutFilter() {
LogoutFilter logoutFilter = new LogoutFilter(casUrl + "/logout", securityContextLogoutHandler());
logoutFilter.setFilterProcessesUrl("/logout/cas");
return logoutFilter;
}

@Bean
public SingleSignOutFilter singleSignOutFilter() {
SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
singleSignOutFilter.setCasServerUrlPrefix(casUrl);
singleSignOutFilter.setIgnoreInitConfiguration(true);
return singleSignOutFilter;
}

@EventListener
public SingleSignOutHttpSessionListener singleSignOutHttpSessionListener(HttpSessionEvent event) {
return new SingleSignOutHttpSessionListener();
}

}

现在我想添加一个授权登录列表,他们是唯一可以访问该应用程序的人(即:要访问,他们必须位于 cas 和静态列表中)。

String allowedLogin = List.of ("robert.bob", "john.jon");

我找到这个链接:Spring security - specific users但我不知道如何实现“StaticUserProvider”以及在配置中的何处配置它。

最佳答案

我认为最简单的方法是如果用户不在列表中,则在 UserDetailsS​​ervice 中抛出 UsernameNotFoundException 。像这样:

    provider.setUserDetailsService((s) -> {
if(!allowedLogin.contains(s.getAssertion().getPrincipal().getName())) {
throw new UsernameNotFoundException("user not authorized to use app");
}
return new User(s, "fakepassword", true, true, true, true, AuthorityUtils.createAuthorityList("ROLE_ADMIN"));
});

关于java - Spring Security + Cas Auth + 允许静态用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52656579/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com