Skip to content

Commit 3b4000b

Browse files
committed
Made usefull Comments
1 parent 6cac69f commit 3b4000b

31 files changed

+580
-417
lines changed

src/main/java/de/jadenk/springcloud/SpringcloudApplication.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
@SpringBootApplication
1313
public class SpringcloudApplication {
1414

15-
// curl -k -X GET https://localhost:8080/api/log/2 -H "X-API-TOKEN: feb58cac1cbf427ea9efe12d114cb467" -H "Accept: application/json"
16-
1715
public static void main(String[] args) {
1816
ApplicationContext context = SpringApplication.run(SpringcloudApplication.class, args);
1917
WebhookService webhookService = context.getBean(WebhookService.class);

src/main/java/de/jadenk/springcloud/config/ApiTokenFilter.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,38 @@ public class ApiTokenFilter extends OncePerRequestFilter {
1919
@Autowired
2020
private ApiTokenRepository apiTokenRepo;
2121

22+
/**
23+
* Filtert alle eingehenden API-Anfragen unter /api/ außer /api/s/ (Administrative Endpoints),
24+
* überprüft den X-API-TOKEN Header und validiert ihn gegen die Datenbank.
25+
*/
26+
2227
@Override
2328
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
2429
throws ServletException, IOException {
2530

2631
String path = request.getRequestURI();
2732

33+
// Nur öffentliche API-Endpunkte filtern
2834
if (path.startsWith("/api/") && !path.startsWith("/api/s/")) {
2935
String token = request.getHeader("X-API-TOKEN");
3036

37+
// Prüfen, ob Token vorhanden ist
3138
if (token == null || token.isBlank()) {
3239
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
3340
response.getWriter().write("Missing API Token");
3441
return;
3542
}
3643

44+
// Prüfen, ob Token gültig und aktiv ist
3745
Optional<ApiToken> validToken = apiTokenRepo.findByTokenAndActiveTrue(token);
38-
3946
if (validToken.isEmpty()) {
4047
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
4148
response.getWriter().write("Invalid API Token");
4249
return;
4350
}
4451
}
4552

53+
// Token gültig oder nicht erforderlich -> Filterkette fortsetzen
4654
filterChain.doFilter(request, response);
4755
}
4856
}

src/main/java/de/jadenk/springcloud/config/SecurityConfig.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,37 +39,44 @@ public class SecurityConfig {
3939
@Bean
4040
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
4141
http
42+
// Logout-Konfiguration
4243
.logout(logout -> logout
4344
.logoutUrl("/logout")
4445
.logoutSuccessUrl("/login?logout")
45-
//.deleteCookies("JSESSIONID", "remember-me")
46-
.permitAll())
46+
//.deleteCookies("JSESSIONID", "remember-me") // optional
47+
.permitAll()
48+
)
49+
// URL-Autorisierung
4750
.authorizeHttpRequests(auth -> auth
4851
.requestMatchers(
49-
"/login",
50-
"/error",
51-
"/css/**",
52-
"/js/**",
53-
"/share/**",
54-
"/link-expired"
55-
).permitAll()
56-
.requestMatchers("/api/**").permitAll()
57-
.anyRequest().authenticated())
52+
"/login", "/error", "/css/**", "/js/**",
53+
"/share/**", "/link-expired"
54+
).permitAll() // öffentlich zugänglich
55+
.requestMatchers("/api/**").permitAll() // Token-Check wird über ApiTokenFilter gemacht
56+
.anyRequest().authenticated() // alles andere erfordert Login
57+
)
58+
// Remember-Me Cookie
5859
.rememberMe(remember -> remember
5960
.key("cookie_remember_me_jadenk_292929")
60-
.tokenValiditySeconds(7 * 24 * 60 * 60)
61+
.tokenValiditySeconds(7 * 24 * 60 * 60) // 7 Tage
6162
)
63+
// FormLogin
6264
.formLogin(form -> form
6365
.loginPage("/login")
6466
.failureHandler(failureHandler)
6567
.successHandler(successHandler)
66-
.permitAll())
68+
.permitAll()
69+
)
70+
// Session Management
6771
.sessionManagement(session -> session
6872
.invalidSessionUrl("/login")
6973
.maximumSessions(10)
7074
.sessionRegistry(sessionRegistry())
7175
);
76+
77+
// API Token Filter vor UsernamePasswordAuthenticationFilter einfügen
7278
http.addFilterBefore(apiTokenFilter, UsernamePasswordAuthenticationFilter.class);
79+
7380
return http.build();
7481
}
7582

@@ -83,18 +90,18 @@ public HttpSessionEventPublisher httpSessionEventPublisher() {
8390
return new HttpSessionEventPublisher();
8491
}
8592

86-
8793
@Bean
8894
public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
89-
AuthenticationManagerBuilder authenticationManagerBuilder =
95+
AuthenticationManagerBuilder authBuilder =
9096
http.getSharedObject(AuthenticationManagerBuilder.class);
91-
authenticationManagerBuilder.userDetailsService(customUserDetailsService)
97+
authBuilder.userDetailsService(customUserDetailsService)
9298
.passwordEncoder(passwordEncoder());
93-
return authenticationManagerBuilder.build();
99+
return authBuilder.build();
94100
}
95101

96102
@Bean
97103
public PasswordEncoder passwordEncoder() {
98104
return new BCryptPasswordEncoder();
99105
}
100106
}
107+

src/main/java/de/jadenk/springcloud/config/WebConfig.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,30 @@ public class WebConfig implements WebMvcConfigurer {
1414

1515
@Autowired
1616
private BannedUserInterceptor bannedUserInterceptor;
17+
1718
@Autowired
1819
private PasswordEnforcementInterceptor passwordEnforcementInterceptor;
1920

2021
@Override
2122
public void addInterceptors(InterceptorRegistry registry) {
23+
// Interceptor für gesperrte Benutzer
2224
registry.addInterceptor(bannedUserInterceptor)
23-
.addPathPatterns("/**")
24-
.excludePathPatterns("/banned", "/logout", "/login", "/css/**", "/js/**");
25+
.addPathPatterns("/**") // alle Pfade
26+
.excludePathPatterns(
27+
"/banned", "/logout", "/login", "/css/**", "/js/**"
28+
); // Ausnahmen: Login, Logout, statische Ressourcen, Banned-Seite
29+
30+
// Interceptor für Passwort-Policy Enforcement
2531
registry.addInterceptor(passwordEnforcementInterceptor);
2632
}
2733

28-
// @Override
29-
// public void addCorsMappings(CorsRegistry registry) {
30-
// registry.addMapping("/**")
31-
// .allowedOrigins("http://127.0.0.1:8080")
32-
// .allowedMethods("GET", "POST")
33-
// .allowedHeaders("*")
34-
// .allowCredentials(true);
35-
// }
36-
34+
// CORS-Konfiguration (auskommentiert)
35+
// @Override
36+
// public void addCorsMappings(CorsRegistry registry) {
37+
// registry.addMapping("/**")
38+
// .allowedOrigins("http://127.0.0.1:8080")
39+
// .allowedMethods("GET", "POST")
40+
// .allowedHeaders("*")
41+
// .allowCredentials(true);
42+
// }
3743
}

0 commit comments

Comments
 (0)