I protect a URL, http://localhost:8080/protected. When reading this URL, it will go to CAS LOGIN PAGE. After successful login, I can go to this URL, but when reading this URL, it will show that it cannot be read. URL, below is my code? Please help me.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private static final Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
// @Value("${spring.security.cas.server.login-url}")
private String casLoginUrl = "http://192.168.203.50:8080/cas-server/login";
// @Value("${spring.security.cas.server.logout-url}")
private String casLogoutUrl = "http://192.168.203.50:8080/cas-server/logout";
// @Value("${spring.security.cas.service.url}")
private String casServiceUrl = "http://localhost:8080";
private final UserDetailsService userDetailsService;
public SecurityConfig(UserDetailsService userDetailsService) {
this.userDetailsService = userDetailsService;
}
@Bean
public ServiceProperties serviceProperties() {
System.out.println("...............Configuring ServiceProperties with service URL: {}" + casServiceUrl);
ServiceProperties serviceProperties = new ServiceProperties();
serviceProperties.setService(casServiceUrl);
serviceProperties.setSendRenew(false);
serviceProperties.setAuthenticateAllArtifacts(true);
logger.info("ServiceProperties configured with service URL: {}", casServiceUrl);
return serviceProperties;
}
@Bean
public TicketValidator ticketValidator() {
System.out.println("...............Configuring TicketValidator with login URL: {}" + casLoginUrl);
return new Cas20ServiceTicketValidator(casLoginUrl);
}
@Bean
public CasAuthenticationProvider casAuthenticationProvider() {
System.out.println("...............Configuring CasAuthenticationProvider");
CasAuthenticationProvider provider = new CasAuthenticationProvider();
provider.setServiceProperties(serviceProperties());
provider.setTicketValidator(ticketValidator());
provider.setUserDetailsService(userDetailsService);
provider.setKey("CAS_PROVIDER_LOCALHOST_9000");
return provider;
}
@Bean
public CasAuthenticationFilter casAuthenticationFilter(AuthenticationManager authenticationManager) {
System.out.println("...............Configuring CasAuthenticationFilter");
CasAuthenticationFilter filter = new CasAuthenticationFilter();
filter.setServiceProperties(serviceProperties());
filter.setAuthenticationManager(authenticationManager);
return filter;
}
@Bean
public FilterRegistrationBean<SingleSignOutFilter> singleSignOutFilter() {
System.out.println("...............Configuring SingleSignOutFilter");
FilterRegistrationBean<SingleSignOutFilter> registrationBean = new FilterRegistrationBean<>(
new SingleSignOutFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setName("CAS Single Sign Out Filter");
registrationBean.setOrder(1);
logger.info("SingleSignOutFilter registered");
return registrationBean;
}
@Bean
public LogoutFilter logoutFilter() {
System.out.println("...............Configuring LogoutFilter");
LogoutFilter filter = new LogoutFilter(casLogoutUrl, new SecurityContextLogoutHandler());
filter.setFilterProcessesUrl("/logout");
return filter;
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
System.out.println("...............Configuring SecurityFilterChain");
http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/protected").hasAuthority("ROLE_USER")
.anyRequest().permitAll()
)
.logout((logout) -> logout
.logoutSuccessUrl("/"))
.addFilterBefore(new CustomLoggingFilter(), CasAuthenticationFilter.class)
.addFilter(casAuthenticationFilter(http.getSharedObject(AuthenticationManager.class)))
.addFilterBefore(singleSignOutFilter().getFilter(), CasAuthenticationFilter.class)
.addFilterBefore(logoutFilter(), LogoutFilter.class);
return http.build();
}
@Bean
public FilterRegistrationBean<CustomLoggingFilter> loggingFilter() {
FilterRegistrationBean<CustomLoggingFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new CustomLoggingFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(0);
return registrationBean;
}
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
System.out.println("...............Configuring AuthenticationManager");
return http.getSharedObject(AuthenticationManagerBuilder.class)
.authenticationProvider(casAuthenticationProvider())
.build();
}
public static class CustomLoggingFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(CustomLoggingFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
logger.info("Request received at CustomLoggingFilter");
System.out.println("request = " + ((HttpServletRequest) request).getRequestURL());
chain.doFilter(request, response);
logger.info("Response processed at CustomLoggingFilter");
}
@Override
public void destroy() {
}
}
}
@Service
public class UserDetailsServiceConfig implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return org.springframework.security.core.userdetails.User
.withUsername(username)
.password("")
.authorities("ROLE_USER")
.build();
}
}
I guess it’s a problem with UserDetailsService, but I can’t find the problem, please help me!!!
New contributor
陳昇賢 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.