diff --git a/src/main/java/com/fujieid/jap/demo/JapDemoApplication.java b/src/main/java/com/fujieid/jap/demo/JapDemoApplication.java index 1691f4c28d29358d213b20a09925587a3d674dfb..4108752da931d0dd7bd7d64950d54bf995d57580 100644 --- a/src/main/java/com/fujieid/jap/demo/JapDemoApplication.java +++ b/src/main/java/com/fujieid/jap/demo/JapDemoApplication.java @@ -1,86 +1,24 @@ package com.fujieid.jap.demo; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fujieid.jap.core.JapUser; -import com.fujieid.jap.core.store.JapUserStoreContextHolder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.boot.autoconfigure.web.ServerProperties; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import javax.annotation.Resource; @SpringBootApplication -@Controller public class JapDemoApplication implements ApplicationRunner { - private final Logger log = LoggerFactory.getLogger(this.getClass()); - @Value("${server.port}") - private int port; + @Resource + private ServerProperties properties; public static void main(String[] args) { SpringApplication.run(JapDemoApplication.class, args); } - @RequestMapping - public String index(Model model, HttpServletRequest request, HttpServletResponse response) { - toIndex(model, request, response); - return "index"; - } - - private void toIndex(Model model, HttpServletRequest request, HttpServletResponse response) { - JapUser japUser = JapUserStoreContextHolder.getStoreUser(request, response); - if (null != japUser) { - model.addAttribute("userJson", claimsToJson(japUser)); - } - Object strategy = request.getSession().getAttribute("strategy"); - model.addAttribute("strategy", strategy); - model.addAttribute("sso", JapConfigContext.sso); - } - - @RequestMapping("/logout") - public String logout(HttpServletRequest request, HttpServletResponse response) { - JapUserStoreContextHolder.logout(request, response); - return "redirect:/"; - } - - @RequestMapping("/enableSso") - public String enableSso(Model model, HttpServletRequest request, HttpServletResponse response) { - JapConfigContext.sso = !JapConfigContext.sso; - toIndex(model, request, response); - return "redirect:/"; - } - - private String claimsToJson(JapUser japUser) { - try { - ObjectMapper mapper = new ObjectMapper(); - // null替换为"" - mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() { - @Override - public void serialize(Object arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException { - arg1.writeString(""); - } - }); - return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(japUser); - } catch (JsonProcessingException jpe) { - log.error("Error parsing claims to JSON", jpe); - } - return "Error parsing claims to JSON."; - } - @Override public void run(ApplicationArguments args) throws Exception { - System.out.println("http://localhost:" + port); + System.out.println("http://localhost:" + properties.getPort()); } } diff --git a/src/main/java/com/fujieid/jap/demo/JapConfigContext.java b/src/main/java/com/fujieid/jap/demo/config/JapConfigContext.java similarity index 96% rename from src/main/java/com/fujieid/jap/demo/JapConfigContext.java rename to src/main/java/com/fujieid/jap/demo/config/JapConfigContext.java index 150fa463a80fd8dd0fdd853e075b0fd05fc71581..c2eae0dc8389b5dedf3c9e8e3ebb1c77b57a150d 100644 --- a/src/main/java/com/fujieid/jap/demo/JapConfigContext.java +++ b/src/main/java/com/fujieid/jap/demo/config/JapConfigContext.java @@ -1,4 +1,4 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.config; import com.fujieid.jap.core.JapConfig; import com.fujieid.jap.sso.config.JapSsoConfig; diff --git a/src/main/java/com/fujieid/jap/demo/controller/HomeController.java b/src/main/java/com/fujieid/jap/demo/controller/HomeController.java new file mode 100644 index 0000000000000000000000000000000000000000..c8f1598e570d305f5f667ff47c0445131ca71f3b --- /dev/null +++ b/src/main/java/com/fujieid/jap/demo/controller/HomeController.java @@ -0,0 +1,76 @@ +package com.fujieid.jap.demo.controller; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fujieid.jap.core.JapUser; +import com.fujieid.jap.core.store.JapUserStoreContextHolder; +import com.fujieid.jap.demo.config.JapConfigContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 首页控制器 + * + * @author L.cm + */ +@Controller +public class HomeController { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @RequestMapping + public String index(Model model, HttpServletRequest request, HttpServletResponse response) { + toIndex(model, request, response); + return "index"; + } + + private void toIndex(Model model, HttpServletRequest request, HttpServletResponse response) { + JapUser japUser = JapUserStoreContextHolder.getStoreUser(request, response); + if (null != japUser) { + model.addAttribute("userJson", claimsToJson(japUser)); + } + Object strategy = request.getSession().getAttribute("strategy"); + model.addAttribute("strategy", strategy); + model.addAttribute("sso", JapConfigContext.sso); + } + + @RequestMapping("/logout") + public String logout(HttpServletRequest request, HttpServletResponse response) { + JapUserStoreContextHolder.logout(request, response); + return "redirect:/"; + } + + @RequestMapping("/enableSso") + public String enableSso(Model model, HttpServletRequest request, HttpServletResponse response) { + JapConfigContext.sso = !JapConfigContext.sso; + toIndex(model, request, response); + return "redirect:/"; + } + + private String claimsToJson(JapUser japUser) { + try { + ObjectMapper mapper = new ObjectMapper(); + // null替换为"" + mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() { + @Override + public void serialize(Object arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException { + arg1.writeString(""); + } + }); + return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(japUser); + } catch (JsonProcessingException jpe) { + log.error("Error parsing claims to JSON", jpe); + } + return "Error parsing claims to JSON."; + } + +} diff --git a/src/main/java/com/fujieid/jap/demo/JapApiController.java b/src/main/java/com/fujieid/jap/demo/controller/JapApiController.java similarity index 94% rename from src/main/java/com/fujieid/jap/demo/JapApiController.java rename to src/main/java/com/fujieid/jap/demo/controller/JapApiController.java index 0a4d2df6f4bb7dcd2fd932759777dce018a7826c..e32da62d50fc4c41bbadfd7f839ef8f7ff367a1b 100644 --- a/src/main/java/com/fujieid/jap/demo/JapApiController.java +++ b/src/main/java/com/fujieid/jap/demo/controller/JapApiController.java @@ -1,4 +1,4 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/src/main/java/com/fujieid/jap/demo/Oauth2Controller.java b/src/main/java/com/fujieid/jap/demo/controller/Oauth2Controller.java similarity index 95% rename from src/main/java/com/fujieid/jap/demo/Oauth2Controller.java rename to src/main/java/com/fujieid/jap/demo/controller/Oauth2Controller.java index 7d382579c922e0fb548bbeb0cb4d6b4f0fb1b21c..62bdc076151852d9d8a8527d12ad59fe30f1ff39 100644 --- a/src/main/java/com/fujieid/jap/demo/Oauth2Controller.java +++ b/src/main/java/com/fujieid/jap/demo/controller/Oauth2Controller.java @@ -1,6 +1,7 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import com.fujieid.jap.core.JapUserService; +import com.fujieid.jap.demo.config.JapConfigContext; import com.fujieid.jap.oauth2.OAuthConfig; import com.fujieid.jap.oauth2.Oauth2GrantType; import com.fujieid.jap.oauth2.Oauth2ResponseType; diff --git a/src/main/java/com/fujieid/jap/demo/Oauth2ImplicitGrantController.java b/src/main/java/com/fujieid/jap/demo/controller/Oauth2ImplicitGrantController.java similarity index 95% rename from src/main/java/com/fujieid/jap/demo/Oauth2ImplicitGrantController.java rename to src/main/java/com/fujieid/jap/demo/controller/Oauth2ImplicitGrantController.java index bd8d280c822479401ecf5a1e0f3cad13de2dbfc6..830675c876d62d984afff304b70d29a631419a3b 100644 --- a/src/main/java/com/fujieid/jap/demo/Oauth2ImplicitGrantController.java +++ b/src/main/java/com/fujieid/jap/demo/controller/Oauth2ImplicitGrantController.java @@ -1,6 +1,7 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import com.fujieid.jap.core.JapUserService; +import com.fujieid.jap.demo.config.JapConfigContext; import com.fujieid.jap.oauth2.OAuthConfig; import com.fujieid.jap.oauth2.Oauth2ResponseType; import com.fujieid.jap.oauth2.Oauth2Strategy; diff --git a/src/main/java/com/fujieid/jap/demo/Oauth2PasswordGrantController.java b/src/main/java/com/fujieid/jap/demo/controller/Oauth2PasswordGrantController.java similarity index 96% rename from src/main/java/com/fujieid/jap/demo/Oauth2PasswordGrantController.java rename to src/main/java/com/fujieid/jap/demo/controller/Oauth2PasswordGrantController.java index 2d13b356926c73bb322760640ef0993eec5826df..f9a71eecc36b3b5c2f3140ff1e9b3e5ee58c3fef 100644 --- a/src/main/java/com/fujieid/jap/demo/Oauth2PasswordGrantController.java +++ b/src/main/java/com/fujieid/jap/demo/controller/Oauth2PasswordGrantController.java @@ -1,6 +1,7 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import com.fujieid.jap.core.JapUserService; +import com.fujieid.jap.demo.config.JapConfigContext; import com.fujieid.jap.oauth2.OAuthConfig; import com.fujieid.jap.oauth2.Oauth2GrantType; import com.fujieid.jap.oauth2.Oauth2Strategy; diff --git a/src/main/java/com/fujieid/jap/demo/OidcController.java b/src/main/java/com/fujieid/jap/demo/controller/OidcController.java similarity index 95% rename from src/main/java/com/fujieid/jap/demo/OidcController.java rename to src/main/java/com/fujieid/jap/demo/controller/OidcController.java index d7bb7543baa8a5cde94dd30c754f7ccc431bb266..7be2dfd9c2a500dcb975bdb208ca8a31b07d7dd4 100644 --- a/src/main/java/com/fujieid/jap/demo/OidcController.java +++ b/src/main/java/com/fujieid/jap/demo/controller/OidcController.java @@ -1,6 +1,7 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import com.fujieid.jap.core.JapUserService; +import com.fujieid.jap.demo.config.JapConfigContext; import com.fujieid.jap.oauth2.Oauth2GrantType; import com.fujieid.jap.oauth2.Oauth2ResponseType; import com.fujieid.jap.oidc.OidcConfig; diff --git a/src/main/java/com/fujieid/jap/demo/SimpleController.java b/src/main/java/com/fujieid/jap/demo/controller/SimpleController.java similarity index 95% rename from src/main/java/com/fujieid/jap/demo/SimpleController.java rename to src/main/java/com/fujieid/jap/demo/controller/SimpleController.java index 892c4a16001033aab4a7e468337f34bcf664bf97..30ca7693e164e7dec27e4aa71905d693e53c55e1 100644 --- a/src/main/java/com/fujieid/jap/demo/SimpleController.java +++ b/src/main/java/com/fujieid/jap/demo/controller/SimpleController.java @@ -1,8 +1,9 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import com.fujieid.jap.core.JapUser; import com.fujieid.jap.core.JapUserService; import com.fujieid.jap.core.store.JapUserStoreContextHolder; +import com.fujieid.jap.demo.config.JapConfigContext; import com.fujieid.jap.simple.SimpleConfig; import com.fujieid.jap.simple.SimpleStrategy; import org.springframework.beans.factory.InitializingBean; diff --git a/src/main/java/com/fujieid/jap/demo/SocialController.java b/src/main/java/com/fujieid/jap/demo/controller/SocialController.java similarity index 95% rename from src/main/java/com/fujieid/jap/demo/SocialController.java rename to src/main/java/com/fujieid/jap/demo/controller/SocialController.java index a6da52802c72df72f71fa4a4e84dc4b467feeab3..9644b1c49c2e5ab80d3d4416aa9a931e2ae8362f 100644 --- a/src/main/java/com/fujieid/jap/demo/SocialController.java +++ b/src/main/java/com/fujieid/jap/demo/controller/SocialController.java @@ -1,6 +1,7 @@ -package com.fujieid.jap.demo; +package com.fujieid.jap.demo.controller; import com.fujieid.jap.core.JapUserService; +import com.fujieid.jap.demo.config.JapConfigContext; import com.fujieid.jap.social.SocialConfig; import com.fujieid.jap.social.SocialStrategy; import me.zhyd.oauth.config.AuthConfig; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index eee36e4a10ef1002395f9596f09894c2d41b9b2f..a57eb3f47f45143cb35e667a19fba8f029657e53 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,20 +1,17 @@ server.port=8443 spring.thymeleaf.cache=false - - - -# Ϊ SSO ǿ -## sessionId cookie domain +# 以下为 SSO 增强配置 +## 配置 sessionId 的 cookie domain server.servlet.session.cookie.domain=jap.com server.servlet.session.cookie.max-age=PT24H -## spring-session-data-redis ʵ session +## 基于 spring-session-data-redis 实现 session 共享 spring.session.store-type=redis spring.session.timeout=PT24H spring.session.redis.flush-mode=immediate -## spring-boot-starter-data-redis redisʵ session ķֲʽ洢 +## 基于 spring-boot-starter-data-redis 配置 redis,实现 session 的分布式存储 spring.redis.database=1 spring.redis.host=localhost spring.redis.port=6379