Skip to content

Commit a037cdd

Browse files
committed
add AuthenticationTokenFilter
1 parent 8302e64 commit a037cdd

File tree

6 files changed

+56
-12
lines changed

6 files changed

+56
-12
lines changed

springboot-starter-security-jwt/src/main/java/com/codingapi/springboot/security/AutoConfiguration.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import com.codingapi.springboot.security.configurer.HttpSecurityConfigurer;
44
import com.codingapi.springboot.security.controller.VersionController;
5+
import com.codingapi.springboot.security.dto.request.LoginRequest;
56
import com.codingapi.springboot.security.filter.*;
67
import com.codingapi.springboot.security.jwt.Jwt;
8+
import com.codingapi.springboot.security.jwt.Token;
79
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
810
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
911
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -24,6 +26,9 @@
2426
import org.springframework.web.servlet.config.annotation.CorsRegistry;
2527
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
2628

29+
import javax.servlet.http.HttpServletRequest;
30+
import javax.servlet.http.HttpServletResponse;
31+
2732
@Configuration
2833
@EnableWebSecurity
2934
public class AutoConfiguration {
@@ -53,28 +58,45 @@ public PasswordEncoder passwordEncoder() {
5358
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
5459
}
5560

61+
@Bean
62+
@ConditionalOnMissingBean
63+
public AuthenticationTokenFilter authenticationTokenFilter() {
64+
return (request, response, chain) -> {
65+
66+
};
67+
}
68+
5669

5770
@Bean
5871
@ConditionalOnMissingBean
59-
public SecurityLoginHandler securityLoginHandler(){
60-
return (request, response, handler) -> {
72+
public SecurityLoginHandler securityLoginHandler() {
73+
return new SecurityLoginHandler() {
74+
@Override
75+
public void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception {
76+
77+
}
78+
79+
@Override
80+
public void postHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler, Token token) {
81+
82+
}
6183
};
6284
}
6385

6486

6587
@Bean
6688
@ConditionalOnMissingBean
67-
public SecurityFilterChain filterChain(HttpSecurity security, Jwt jwt,SecurityLoginHandler loginHandler,
68-
SecurityJwtProperties properties) throws Exception {
89+
public SecurityFilterChain filterChain(HttpSecurity security, Jwt jwt, SecurityLoginHandler loginHandler,
90+
SecurityJwtProperties properties, AuthenticationTokenFilter authenticationTokenFilter) throws Exception {
6991
//disable basic auth
7092
security.httpBasic().disable();
7193

7294
//before add addCorsMappings to enable cors.
7395
security.cors();
74-
if(properties.isDisableCsrf() ){
96+
if (properties.isDisableCsrf()) {
7597
security.csrf().disable();
7698
}
77-
security.apply(new HttpSecurityConfigurer(jwt,loginHandler,properties));
99+
security.apply(new HttpSecurityConfigurer(jwt, loginHandler, properties, authenticationTokenFilter));
78100
security
79101
.exceptionHandling()
80102
.authenticationEntryPoint(new MyUnAuthenticationEntryPoint())
@@ -125,7 +147,7 @@ public WebMvcConfigurer corsConfigurer(SecurityJwtProperties securityJwtProperti
125147
return new WebMvcConfigurer() {
126148
@Override
127149
public void addCorsMappings(CorsRegistry registry) {
128-
if(securityJwtProperties.isDisableCors()) {
150+
if (securityJwtProperties.isDisableCors()) {
129151
registry.addMapping("/**")
130152
.allowedHeaders("*")
131153
.allowedMethods("*")
@@ -149,7 +171,7 @@ public SecurityJwtProperties securityJwtProperties() {
149171

150172
@Bean
151173
@ConditionalOnMissingBean
152-
public VersionController versionController(Environment environment){
174+
public VersionController versionController(Environment environment) {
153175
return new VersionController(environment);
154176
}
155177

springboot-starter-security-jwt/src/main/java/com/codingapi/springboot/security/configurer/HttpSecurityConfigurer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.springboot.security.configurer;
22

3+
import com.codingapi.springboot.security.filter.AuthenticationTokenFilter;
34
import com.codingapi.springboot.security.filter.MyAuthenticationFilter;
45
import com.codingapi.springboot.security.filter.MyLoginFilter;
56
import com.codingapi.springboot.security.filter.SecurityLoginHandler;
@@ -17,11 +18,12 @@ public class HttpSecurityConfigurer extends AbstractHttpConfigurer<HttpSecurityC
1718

1819
private final SecurityLoginHandler securityLoginHandler;
1920
private final SecurityJwtProperties securityJwtProperties;
21+
private final AuthenticationTokenFilter authenticationTokenFilter;
2022

2123
@Override
2224
public void configure(HttpSecurity security) throws Exception {
2325
AuthenticationManager manager = security.getSharedObject(AuthenticationManager.class);
2426
security.addFilter(new MyLoginFilter(manager, jwt,securityLoginHandler, securityJwtProperties));
25-
security.addFilter(new MyAuthenticationFilter(manager,securityJwtProperties,jwt));
27+
security.addFilter(new MyAuthenticationFilter(manager,securityJwtProperties,jwt,authenticationTokenFilter));
2628
}
2729
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.codingapi.springboot.security.filter;
2+
3+
import javax.servlet.FilterChain;
4+
import javax.servlet.http.HttpServletRequest;
5+
import javax.servlet.http.HttpServletResponse;
6+
7+
public interface AuthenticationTokenFilter {
8+
9+
10+
void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain);
11+
12+
}

springboot-starter-security-jwt/src/main/java/com/codingapi/springboot/security/filter/MyAuthenticationFilter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ public class MyAuthenticationFilter extends BasicAuthenticationFilter {
2929
private final Jwt jwt;
3030

3131
private final SecurityJwtProperties securityJwtProperties;
32+
private final AuthenticationTokenFilter authenticationTokenFilter;
3233
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
3334

34-
public MyAuthenticationFilter(AuthenticationManager manager, SecurityJwtProperties securityJwtProperties, Jwt jwt) {
35+
public MyAuthenticationFilter(AuthenticationManager manager, SecurityJwtProperties securityJwtProperties, Jwt jwt,AuthenticationTokenFilter authenticationTokenFilter) {
3536
super(manager);
3637
this.jwt = jwt;
3738
this.securityJwtProperties = securityJwtProperties;
39+
this.authenticationTokenFilter = authenticationTokenFilter;
3840
}
3941

4042

@@ -64,6 +66,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
6466
}
6567

6668
SecurityContextHolder.getContext().setAuthentication(token.getAuthenticationToken());
69+
authenticationTokenFilter.doFilter(request, response, chain);
6770
}
6871
}
6972
chain.doFilter(request, response);

springboot-starter-security-jwt/src/main/java/com/codingapi/springboot/security/filter/MyLoginFilter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Authentication attemptAuthentication(HttpServletRequest request, HttpServ
5858
throw new AuthenticationServiceException("request stream read was null.");
5959
}
6060
try {
61-
loginHandler.preHandle(request,response,login);
61+
loginHandler.preHandle(request, response, login);
6262
} catch (Exception e) {
6363
throw new AuthenticationServiceException(e.getLocalizedMessage());
6464
}
@@ -84,6 +84,8 @@ protected void successfulAuthentication(HttpServletRequest request, HttpServletR
8484
String content = JSONObject.toJSONString(SingleResponse.of(login));
8585
IOUtils.write(content, response.getOutputStream(), StandardCharsets.UTF_8);
8686

87+
loginHandler.postHandle(request, response, loginRequest, token);
88+
8789
LoginRequestContext.getInstance().clean();
8890
}
8991

Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.codingapi.springboot.security.filter;
22

33
import com.codingapi.springboot.security.dto.request.LoginRequest;
4+
import com.codingapi.springboot.security.jwt.Token;
45

56
import javax.servlet.http.HttpServletRequest;
67
import javax.servlet.http.HttpServletResponse;
78

89

910
public interface SecurityLoginHandler {
1011

11-
void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception;
12+
void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception;
13+
14+
void postHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler, Token token);
1215
}

0 commit comments

Comments
 (0)