Browse Source

微调认证接口,使之适应前端的新坑

reghao 5 years ago
parent
commit
26ff5571dd

+ 7 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/config/WebSecurityConfig.java

@@ -1,9 +1,6 @@
 package cn.reghao.autodop.dmaster.auth.config;
 
-import cn.reghao.autodop.dmaster.auth.jwt.JwtTokenFilter;
-import cn.reghao.autodop.dmaster.auth.jwt.UserDetailsServiceImpl;
-import cn.reghao.autodop.dmaster.auth.jwt.UsernamePasswordAuthFilter;
-import cn.reghao.autodop.dmaster.auth.jwt.UsernamePasswordAuthProvider;
+import cn.reghao.autodop.dmaster.auth.jwt.*;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.access.expression.SecurityExpressionHandler;
@@ -43,7 +40,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/**").permitAll()
                 // TODO 放行所有接口(测试时使用)
                 //.antMatchers("/api/**").permitAll()
-                //.antMatchers("/*").permitAll()
+                .antMatchers("/logout").permitAll()
                 .antMatchers("/actuator/health").permitAll()
                 .anyRequest().authenticated();
 
@@ -66,6 +63,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .and()
                 .httpBasic().disable();
 
+        // TODO 处理 POST /logout, spring security 中默认的 /logout 不能处理 options 请求
+        http.logout()
+                .logoutUrl("/signout")
+                .logoutSuccessHandler(new LogoutSuccessHandlerImpl());
+
         http.addFilterBefore(usernamePasswordAuthFilter(), UsernamePasswordAuthenticationFilter.class);
         http.addFilterAfter(new JwtTokenFilter(), UsernamePasswordAuthFilter.class);
     }

+ 11 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/controller/IndexController.java

@@ -53,6 +53,15 @@ public class IndexController {
         return ResponseEntity.ok().body(JsonUtil.objectToJson(userResult));
     }
 
+    @PostMapping("/logout")
+    public ResponseEntity<String> logout() {
+        Map<String, String> map = new HashMap<>();
+        map.put("code", "20000");
+        map.put("data", "success");
+
+        return ResponseEntity.ok().body(JsonUtil.objectToJson(map));
+    }
+
     @Data
     static class UserResultData {
         private String avatar;
@@ -119,12 +128,9 @@ public class IndexController {
         return ResponseEntity.ok().body(JsonUtil.objectToJson(resultData));
     }
 
-    @PostMapping("/logout")
+    @PostMapping("/login")
     public ResponseEntity<String> login() {
-        Map<String, String> map = new HashMap<>();
-        map.put("code", "20000");
-        map.put("data", "success");
-        return ResponseEntity.ok().body(JsonUtil.objectToJson(map));
+        return ResponseEntity.ok().body("");
     }
 
     @GetMapping("/api/getCardsData")

+ 48 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/LogoutSuccessHandlerImpl.java

@@ -0,0 +1,48 @@
+package cn.reghao.autodop.dmaster.auth.jwt;
+
+import cn.reghao.autodop.common.utils.JsonUtil;
+import cn.reghao.autodop.dmaster.auth.controller.IndexController;
+import lombok.Data;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2020-10-01 00:02:57
+ */
+public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
+    @Override
+    public void onLogoutSuccess(HttpServletRequest request,
+                                HttpServletResponse response,
+                                Authentication authentication) throws IOException, ServletException {
+
+        Map<String, String> map = new HashMap<>();
+        map.put("code", "20000");
+        map.put("data", "success");
+        PrintWriter pt = response.getWriter();
+        pt.println(JsonUtil.objectToJson(map));
+    }
+
+    @Data
+    static class UserResultData {
+        private String avatar;
+        private String introduction;
+        private String name;
+        private List<String> roles;
+    }
+
+    @Data
+    static class UserResult {
+        private int code;
+        private UserResultData data;
+    }
+}