支持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>