Skip to content

Commit 1f5bea6

Browse files
committed
Usescases
1 parent 1ed3633 commit 1f5bea6

File tree

4 files changed

+53
-2
lines changed

4 files changed

+53
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.reflectoring.security;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.reflectoring.security.exception.CommonException;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
import org.springframework.util.StringUtils;
8+
import org.springframework.web.filter.OncePerRequestFilter;
9+
10+
import javax.servlet.FilterChain;
11+
import javax.servlet.ServletException;
12+
import javax.servlet.http.HttpServletRequest;
13+
import javax.servlet.http.HttpServletResponse;
14+
import java.io.IOException;
15+
16+
public class CustomHeaderValidatorFilter extends OncePerRequestFilter {
17+
18+
private static final Logger log = LoggerFactory.getLogger(CustomHeaderValidatorFilter.class);
19+
20+
@Override
21+
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
22+
String path = request.getRequestURI();
23+
return path.startsWith("/library/books/all");
24+
}
25+
26+
@Override
27+
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
28+
log.info("Custom filter called...");
29+
if (StringUtils.isEmpty(request.getHeader("X-Application-Name"))) {
30+
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
31+
response.setContentType("application/json");
32+
response.getOutputStream().println(new ObjectMapper().writeValueAsString(CommonException.headerError()));
33+
} else {
34+
filterChain.doFilter(request, response);
35+
}
36+
}
37+
}

spring-security/getting-started/SecureApplication/src/main/java/com/reflectoring/security/config/SecurityConfiguration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.reflectoring.security.config;
22

3+
import com.reflectoring.security.CustomHeaderValidatorFilter;
34
import com.reflectoring.security.exception.UserAuthenticationErrorHandler;
45
import com.reflectoring.security.exception.UserForbiddenErrorHandler;
56
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -15,6 +16,7 @@
1516
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
1617
import org.springframework.security.web.AuthenticationEntryPoint;
1718
import org.springframework.security.web.SecurityFilterChain;
19+
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
1820

1921
@Configuration
2022
@EnableWebSecurity
@@ -44,9 +46,16 @@ public SecurityFilterChain bookFilterChain(HttpSecurity http) throws Exception {
4446
.authenticationEntryPoint(userAuthenticationErrorHandler())
4547
.accessDeniedHandler(new UserForbiddenErrorHandler()));
4648

49+
http.addFilterBefore(customHeaderValidatorFilter(), BasicAuthenticationFilter.class);
50+
4751
return http.build();
4852
}
4953

54+
@Bean
55+
public CustomHeaderValidatorFilter customHeaderValidatorFilter() {
56+
return new CustomHeaderValidatorFilter();
57+
}
58+
5059
@Bean
5160
public WebSecurityCustomizer webSecurityCustomizer() {
5261
return (web) -> web.ignoring().antMatchers("/library/info");

spring-security/getting-started/SecureApplication/src/main/java/com/reflectoring/security/exception/CommonException.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
import org.zalando.problem.StatusType;
77

88
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
9-
import static org.zalando.problem.Status.FORBIDDEN;
10-
import static org.zalando.problem.Status.UNAUTHORIZED;
9+
import static org.zalando.problem.Status.*;
1110

1211
@JsonInclude(NON_EMPTY)
1312
@JsonIgnoreProperties({"stackTrace", "type", "title", "message", "localizedMessage", "parameters"})
@@ -25,5 +24,9 @@ public static CommonException forbidden() {
2524
return new CommonException(FORBIDDEN, "Forbidden");
2625
}
2726

27+
public static CommonException headerError() {
28+
return new CommonException(FORBIDDEN, "Missing Header");
29+
}
30+
2831

2932
}

spring-security/getting-started/SecureApplication/src/main/java/com/reflectoring/security/web/BookController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,6 @@ public ResponseEntity<List<BookDto>> getAllBooks() {
4242
public ResponseEntity<LibraryInfo> getInfo() {
4343
return ResponseEntity.ok().body(bookService.getLibraryInfo());
4444
}
45+
46+
4547
}

0 commit comments

Comments
 (0)