SecurityConfig.java
/*
* UVerify Backend
* Copyright (C) 2025 Fabian Bormann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package io.uverify.backend.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AnyRequestMatcher;
import org.springframework.web.cors.CorsConfigurationSource;
@Configuration
@SuppressWarnings("unused")
@EnableWebSecurity
public class SecurityConfig {
@Autowired
private CorsConfigurationSource corsConfigurationSource;
@Autowired
private Environment environment;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(request -> request.requestMatchers(AnyRequestMatcher.INSTANCE).permitAll())
.cors(cors -> cors.configurationSource(corsConfigurationSource));
if (isHttpsProfileActive()) {
http.requiresChannel(channel ->
channel.anyRequest().requiresSecure() // Enforce HTTPS
);
}
return http.build();
}
private boolean isHttpsProfileActive() {
for (String profile : environment.getActiveProfiles()) {
if (profile.equalsIgnoreCase("https")) {
return true;
}
}
return false;
}
}