支持OAuth2控制api的访问
diff --git a/samples/client/pom.xml b/samples/client/pom.xml
index c680787..2f2ccae 100644
--- a/samples/client/pom.xml
+++ b/samples/client/pom.xml
@@ -67,11 +67,22 @@
<artifactId>infras-security</artifactId>
</dependency>
- <!-- <dependency>
+ <!--
+ <dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
- </dependency> -->
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.springframework.security.oauth.boot</groupId>
+ <artifactId>spring-security-oauth2-autoconfigure</artifactId>
+ </dependency>
+
+ <!-- <dependency>
+ <groupId>org.springframework.security.oauth</groupId>
+ <artifactId>spring-security-oauth2</artifactId>
+ </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java
index 4d83c0d..9b946d0 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/ClientApplication.java
@@ -7,15 +7,20 @@
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
-import com.supwisdom.infras.security.EnableInfrasWebSecurity;
+import com.supwisdom.infras.security.configure.oauth2.EnableInfrasOAuth2;
+import com.supwisdom.infras.security.configure.web.EnableInfrasWebSecurity;
@SpringBootApplication
@EnableCircuitBreaker
@EnableFeignClients(value = "com.supwisdom.leaveschool.client.service")
@EnableHystrixDashboard
@EnableInfrasWebSecurity
+@EnableInfrasOAuth2
public class ClientApplication {
public static void main(String[] args) {
@@ -34,5 +39,17 @@
return servletRegistrationBean;
}
+
+ @Bean
+ public CorsFilter corsFilter() {
+ final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ final CorsConfiguration config = new CorsConfiguration();
+ config.setAllowCredentials(true);
+ config.addAllowedOrigin("*");
+ config.addAllowedHeader("*");
+ config.addAllowedMethod("*");
+ source.registerCorsConfiguration("/**", config);
+ return new CorsFilter(source);
+ }
}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/MainController.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/MainController.java
index 217f944..f3ea07f 100755
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/MainController.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/controller/web/MainController.java
@@ -16,38 +16,19 @@
package com.supwisdom.leaveschool.client.controller.web;
import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MainController {
- @RequestMapping("/")
- public String root() {
- return "redirect:/web/index";
- }
+ @RequestMapping("/")
+ public String root() {
+ return "redirect:/web/index";
+ }
- @RequestMapping("/web/index")
- public String index() {
- return "web/index";
- }
-
- @RequestMapping(value = "/web/login")
- public String login() {
- return "web/login";
- }
-
- @RequestMapping(value = "/web/login", method = RequestMethod.POST)
- public String postLogin() {
- // TODO Enable form login with Spring Security (trigger error for now)
- return "redirect:/web/login-error";
- }
-
- @RequestMapping("/web/login-error")
- public String loginError(Model model) {
- model.addAttribute("loginError", true);
- return "web/login";
- }
+ @RequestMapping("/web/index")
+ public String index() {
+ return "web/index";
+ }
}
diff --git a/samples/client/src/main/resources/templates/oauth/login.html b/samples/client/src/main/resources/templates/oauth/login.html
new file mode 100755
index 0000000..bb91660
--- /dev/null
+++ b/samples/client/src/main/resources/templates/oauth/login.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
+ <head>
+ <title>OAuth2 Login page</title>
+ <meta charset="utf-8" />
+ <link rel="stylesheet" href="/assets/css/main.css" th:href="@{/assets/css/main.css}" />
+ </head>
+ <body>
+ <h1>OAuth2 Login page</h1>
+ <p>Example user: user / password</p>
+
+ <div th:if="${loginError}" class="error">Wrong user or password</div>
+ <div th:if="${param.error}" class="alert alert-error">Invalid username and password.</div>
+ <div th:if="${param.logout}" class="alert alert-success">You have been logged out.</div>
+
+ <form th:action="@{/oauth/login}" method="post">
+ <label for="username">Username</label>:
+ <input type="text" id="username" name="username" autofocus="autofocus" /> <br />
+ <label for="password">Password</label>:
+ <input type="password" id="password" name="password" /> <br />
+ <input type="submit" value="Log in" />
+ </form>
+ </body>
+</html>
diff --git a/samples/client/src/main/resources/templates/web/login.html b/samples/client/src/main/resources/templates/web/login.html
index 1bc5e4d..7eb81aa 100755
--- a/samples/client/src/main/resources/templates/web/login.html
+++ b/samples/client/src/main/resources/templates/web/login.html
@@ -8,7 +8,8 @@
<body>
<h1>Login page</h1>
<p>Example user: user / password</p>
- <p th:if="${loginError}" class="error">Wrong user or password</p>
+
+ <div th:if="${loginError}" class="error">Wrong user or password</div>
<div th:if="${param.error}" class="alert alert-error">Invalid username and password.</div>
<div th:if="${param.logout}" class="alert alert-success">You have been logged out.</div>
@@ -19,6 +20,6 @@
<input type="password" id="password" name="password" /> <br />
<input type="submit" value="Log in" />
</form>
- <p><a href="/index" th:href="@{/index}">Back to home page</a></p>
+ <p><a href="/web/index" th:href="@{/web/index}">Back to home page</a></p>
</body>
</html>