Skip to content

Commit 037aba8

Browse files
committed
add SecurityLoginHandler.java
1 parent eb8fbb7 commit 037aba8

File tree

8 files changed

+50
-18
lines changed

8 files changed

+50
-18
lines changed

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

+17-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.codingapi.springboot.security;
22

33
import com.codingapi.springboot.security.configurer.HttpSecurityConfigurer;
4-
import com.codingapi.springboot.security.filter.MyAccessDeniedHandler;
5-
import com.codingapi.springboot.security.filter.MyLogoutHandler;
6-
import com.codingapi.springboot.security.filter.MyLogoutSuccessHandler;
7-
import com.codingapi.springboot.security.filter.MyUnAuthenticationEntryPoint;
4+
import com.codingapi.springboot.security.dto.request.LoginRequest;
5+
import com.codingapi.springboot.security.filter.*;
86
import com.codingapi.springboot.security.handler.ServletExceptionHandler;
97
import com.codingapi.springboot.security.jwt.Jwt;
108
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
@@ -27,6 +25,9 @@
2725
import org.springframework.web.servlet.config.annotation.CorsRegistry;
2826
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
2927

28+
import javax.servlet.http.HttpServletRequest;
29+
import javax.servlet.http.HttpServletResponse;
30+
3031
@Configuration
3132
@EnableMethodSecurity
3233
public class AutoConfiguration {
@@ -62,15 +63,25 @@ public HandlerExceptionResolver servletExceptionHandler() {
6263
return new ServletExceptionHandler();
6364
}
6465

66+
@Bean
67+
@ConditionalOnMissingBean
68+
public SecurityLoginHandler securityLoginHandler(){
69+
return new SecurityLoginHandler() {
70+
@Override
71+
public void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception {
72+
73+
}
74+
};
75+
}
6576

6677
@Bean
6778
@ConditionalOnMissingBean
68-
public SecurityFilterChain filterChain(HttpSecurity http, Jwt jwt, SecurityJwtProperties properties) throws Exception {
79+
public SecurityFilterChain filterChain(HttpSecurity http, Jwt jwt,SecurityLoginHandler loginHandler, SecurityJwtProperties properties) throws Exception {
6980
//before add addCorsMappings to enable cors.
7081
http.cors();
7182

7283
http.csrf().disable();
73-
http.apply(new HttpSecurityConfigurer(jwt, properties));
84+
http.apply(new HttpSecurityConfigurer(jwt,loginHandler,properties));
7485
http
7586
.exceptionHandling()
7687
.authenticationEntryPoint(new MyUnAuthenticationEntryPoint())

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.codingapi.springboot.security.filter.MyAuthenticationFilter;
44
import com.codingapi.springboot.security.filter.MyLoginFilter;
5+
import com.codingapi.springboot.security.filter.SecurityLoginHandler;
56
import com.codingapi.springboot.security.jwt.Jwt;
67
import com.codingapi.springboot.security.properties.SecurityJwtProperties;
78
import lombok.AllArgsConstructor;
@@ -14,12 +15,13 @@ public class HttpSecurityConfigurer extends AbstractHttpConfigurer<HttpSecurityC
1415

1516
private final Jwt jwt;
1617

18+
private final SecurityLoginHandler securityLoginHandler;
1719
private final SecurityJwtProperties securityJwtProperties;
1820

1921
@Override
2022
public void configure(HttpSecurity http) throws Exception {
2123
AuthenticationManager manager = http.getSharedObject(AuthenticationManager.class);
22-
http.addFilter(new MyLoginFilter(manager, jwt, securityJwtProperties));
24+
http.addFilter(new MyLoginFilter(manager, jwt,securityLoginHandler, securityJwtProperties));
2325
http.addFilter(new MyAuthenticationFilter(manager, jwt));
2426
}
2527
}

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

+9-1
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ public class MyLoginFilter extends UsernamePasswordAuthenticationFilter {
3434

3535
private final Jwt jwt;
3636

37-
public MyLoginFilter(AuthenticationManager authenticationManager, Jwt jwt, SecurityJwtProperties securityJwtProperties) {
37+
private final SecurityLoginHandler loginHandler;
38+
39+
public MyLoginFilter(AuthenticationManager authenticationManager, Jwt jwt, SecurityLoginHandler loginHandler, SecurityJwtProperties securityJwtProperties) {
3840
super(authenticationManager);
3941
this.jwt = jwt;
42+
this.loginHandler = loginHandler;
4043
this.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(securityJwtProperties.getLoginProcessingUrl(), "POST"));
4144
}
4245

@@ -53,6 +56,11 @@ public Authentication attemptAuthentication(HttpServletRequest request, HttpServ
5356
if (login == null || login.isEmpty()) {
5457
throw new AuthenticationServiceException("request stream read was null.");
5558
}
59+
try {
60+
loginHandler.preHandle(request,response,login);
61+
} catch (Exception e) {
62+
throw new AuthenticationServiceException(e.getLocalizedMessage());
63+
}
5664
LoginRequestContext.getInstance().set(login);
5765
return getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken(login.getUsername(), login.getPassword()));
5866
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.codingapi.springboot.security.filter;
2+
3+
import com.codingapi.springboot.security.dto.request.LoginRequest;
4+
5+
import javax.servlet.http.HttpServletRequest;
6+
import javax.servlet.http.HttpServletResponse;
7+
8+
public interface SecurityLoginHandler {
9+
10+
void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception;
11+
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public Token() {
3131

3232
public Token(String username, String certificate, List<String> authorities, int expireValue, int remindValue) throws IOException {
3333
this.username = username;
34-
this.certificate = AESUtils.getInstance().encodeToBase64(certificate);
34+
this.certificate = AESUtils.getInstance().encode(certificate);
3535
this.authorities = authorities;
3636
this.expireTime = System.currentTimeMillis() + expireValue;
3737
this.remindTime = System.currentTimeMillis() + remindValue;
@@ -55,7 +55,7 @@ public String getCertificate() {
5555

5656
@Transient
5757
public String getDecodePassword() throws IOException {
58-
return AESUtils.getInstance().decodeToBase64(certificate);
58+
return AESUtils.getInstance().decode(certificate);
5959
}
6060

6161
public boolean canRestToken() {

springboot-starter/src/main/java/com/codingapi/springboot/framework/crypto/AES.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ public AES(String key, String iv) {
3535
}
3636

3737

38-
public String encodeToBase64(String input) throws IOException {
38+
public String encode(String input) throws IOException {
3939
return Base64Utils.encodeToString(encode(input.getBytes(StandardCharsets.UTF_8)));
4040
}
4141

42-
public String decodeToBase64(String input) throws IOException {
42+
public String decode(String input) throws IOException {
4343
return new String(decode(Base64Utils.decodeFromString(input)), StandardCharsets.UTF_8);
4444
}
4545

springboot-starter/src/main/java/com/codingapi/springboot/framework/crypto/AESUtils.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ void init(AES aes) {
2222
this.aes = aes;
2323
}
2424

25-
public String encodeToBase64(String input) throws IOException {
26-
return aes.encodeToBase64(input);
25+
public String encode(String input) throws IOException {
26+
return aes.encode(input);
2727
}
2828

29-
public String decodeToBase64(String input) throws IOException {
30-
return aes.decodeToBase64(input);
29+
public String decode(String input) throws IOException {
30+
return aes.decode(input);
3131
}
3232

3333
public byte[] encode(byte[] input) throws IOException {

springboot-starter/src/test/java/com/codingapi/springboot/framework/crypto/AESUtilsTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ class AESUtilsTest {
1414
@Test
1515
void encodeDecodeToBase64() throws IOException {
1616
String word = "123";
17-
String encode = AESUtils.getInstance().encodeToBase64(word);
18-
String decode = AESUtils.getInstance().decodeToBase64(encode);
17+
String encode = AESUtils.getInstance().encode(word);
18+
String decode = AESUtils.getInstance().decode(encode);
1919
assertEquals(word,decode,"AES encode error");
2020
}
2121

0 commit comments

Comments
 (0)