commit
						2ce07595d5
					
				| @ -16,7 +16,8 @@ | ||||
|     <modules> | ||||
|         <module>spring-security-oauth-server</module> | ||||
|         <module>spring-security-oauth-resource</module> | ||||
|         <module>spring-security-oauth-ui</module> | ||||
|         <module>spring-security-oauth-ui-implicit</module> | ||||
|         <module>spring-security-oauth-ui-password</module> | ||||
|     </modules> | ||||
| 
 | ||||
|     <build> | ||||
|  | ||||
| @ -11,38 +11,45 @@ | ||||
| 		<version>1.0.0-SNAPSHOT</version> | ||||
| 	</parent> | ||||
| 
 | ||||
| <dependencies> | ||||
| 	<dependency> | ||||
| 		<groupId>org.springframework.boot</groupId> | ||||
| 		<artifactId>spring-boot-starter-web</artifactId> | ||||
| 	</dependency> | ||||
| 
 | ||||
| 	<dependency> | ||||
| 		<groupId>org.springframework</groupId> | ||||
| 		<artifactId>spring-jdbc</artifactId> | ||||
| 	</dependency> | ||||
| 
 | ||||
| 	<dependency> | ||||
| 		<groupId>mysql</groupId> | ||||
| 		<artifactId>mysql-connector-java</artifactId> | ||||
| 		<scope>runtime</scope> | ||||
| 	</dependency> | ||||
| 	<!-- oauth --> | ||||
| 	<dependency> | ||||
| 		<groupId>org.springframework.security.oauth</groupId> | ||||
| 		<artifactId>spring-security-oauth2</artifactId> | ||||
| 		<version>${oauth.version}</version> | ||||
| 	</dependency> | ||||
| 
 | ||||
| 	<dependency> | ||||
| 		<groupId>org.apache.commons</groupId> | ||||
| 		<artifactId>commons-lang3</artifactId> | ||||
| 		<version>${commons-lang3.version}</version> | ||||
| 	</dependency> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| </dependencies> | ||||
| 	<dependencies> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework.boot</groupId> | ||||
| 			<artifactId>spring-boot-starter-web</artifactId> | ||||
| 		</dependency> | ||||
| 	 | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework</groupId> | ||||
| 			<artifactId>spring-jdbc</artifactId> | ||||
| 		</dependency> | ||||
| 	 | ||||
| 		<dependency> | ||||
| 			<groupId>mysql</groupId> | ||||
| 			<artifactId>mysql-connector-java</artifactId> | ||||
| 			<scope>runtime</scope> | ||||
| 		</dependency> | ||||
| 		<!-- oauth --> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework.security.oauth</groupId> | ||||
| 			<artifactId>spring-security-oauth2</artifactId> | ||||
| 			<version>${oauth.version}</version> | ||||
| 		</dependency> | ||||
| 	 | ||||
| 		<dependency> | ||||
| 			<groupId>org.apache.commons</groupId> | ||||
| 			<artifactId>commons-lang3</artifactId> | ||||
| 			<version>${commons-lang3.version}</version> | ||||
| 		</dependency> | ||||
| 	 | ||||
| 	</dependencies> | ||||
| 
 | ||||
|     <build> | ||||
|         <finalName>spring-security-oauth-resource</finalName> | ||||
|         <resources> | ||||
|             <resource> | ||||
|                 <directory>src/main/resources</directory> | ||||
|                 <filtering>true</filtering> | ||||
|             </resource> | ||||
|         </resources> | ||||
|     </build> | ||||
| 
 | ||||
| </project> | ||||
| @ -44,6 +44,13 @@ | ||||
| 
 | ||||
| 
 | ||||
|     <build> | ||||
|         <finalName>spring-security-oauth-server</finalName> | ||||
|         <resources> | ||||
|             <resource> | ||||
|                 <directory>src/main/resources</directory> | ||||
|                 <filtering>true</filtering> | ||||
|             </resource> | ||||
|         </resources> | ||||
|         <plugins> | ||||
|             <plugin> | ||||
|                 <groupId>org.springframework.boot</groupId> | ||||
|  | ||||
| @ -3,6 +3,7 @@ package org.baeldung.config; | ||||
| import javax.sql.DataSource; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| @ -31,6 +32,7 @@ public class AuthServerOAuth2Config extends AuthorizationServerConfigurerAdapter | ||||
|     private Environment env; | ||||
| 
 | ||||
|     @Autowired | ||||
|     @Qualifier("authenticationManagerBean") | ||||
|     private AuthenticationManager authenticationManager; | ||||
| 
 | ||||
|     @Value("classpath:schema.sql") | ||||
| @ -47,8 +49,14 @@ public class AuthServerOAuth2Config extends AuthorizationServerConfigurerAdapter | ||||
|         clients.jdbc(dataSource()) | ||||
|                .withClient("clientId") | ||||
|                .authorizedGrantTypes("implicit") | ||||
|                .scopes("read","write") | ||||
|                .autoApprove(true); | ||||
|                .scopes("read") | ||||
|                .autoApprove(true) | ||||
|                .and() | ||||
|                .withClient("clientIdPassword") | ||||
|                .secret("secret") | ||||
|                .authorizedGrantTypes("password","authorization_code", "refresh_token") | ||||
|                .scopes("read"); | ||||
| 
 | ||||
|      // @formatter:on | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| package org.baeldung.config; | ||||
| 
 | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.security.authentication.AuthenticationManager; | ||||
| import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | ||||
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | ||||
| import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | ||||
| @ -11,17 +13,24 @@ public class ServerSecurityConfig extends WebSecurityConfigurerAdapter { | ||||
|     @Override | ||||
|     protected void configure(final AuthenticationManagerBuilder auth) throws Exception { | ||||
|         auth.inMemoryAuthentication().withUser("john").password("123").roles("USER"); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     @Bean | ||||
|     public AuthenticationManager authenticationManagerBean() throws Exception { | ||||
|         return super.authenticationManagerBean(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void configure(HttpSecurity http) throws Exception { | ||||
|         // @formatter:off | ||||
|             http | ||||
|             .authorizeRequests() | ||||
|         http.authorizeRequests() | ||||
|             .antMatchers("/login").permitAll() | ||||
|             .anyRequest().authenticated() | ||||
|             .and() | ||||
|             .formLogin().permitAll(); | ||||
|         // @formatter:on | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <projectDescription> | ||||
| 	<name>spring-security-oauth-ui</name> | ||||
| 	<name>spring-security-oauth-ui-implicit</name> | ||||
| 	<comment></comment> | ||||
| 	<projects> | ||||
| 	</projects> | ||||
| @ -20,6 +20,11 @@ | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.m2e.core.maven2Builder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.springframework.ide.eclipse.core.springbuilder</name> | ||||
| 			<arguments> | ||||
| @ -30,11 +35,6 @@ | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.m2e.core.maven2Builder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 	</buildSpec> | ||||
| 	<natures> | ||||
| 		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature> | ||||
| @ -1,8 +1,8 @@ | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>spring-security-oauth-ui</artifactId> | ||||
|     <artifactId>spring-security-oauth-ui-implicit</artifactId> | ||||
| 
 | ||||
|     <name>spring-security-oauth-ui</name> | ||||
|     <name>spring-security-oauth-ui-implicit</name> | ||||
|     <packaging>war</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
| @ -19,11 +19,18 @@ | ||||
|         </dependency> | ||||
| 
 | ||||
|        <dependency> | ||||
|         <groupId>org.springframework.boot</groupId> | ||||
|         <artifactId>spring-boot-starter-thymeleaf</artifactId> | ||||
|     </dependency> | ||||
| 
 | ||||
|         | ||||
| 
 | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-thymeleaf</artifactId> | ||||
|        </dependency> | ||||
|     </dependencies> | ||||
|      | ||||
|     <build> | ||||
|         <finalName>spring-security-oauth-ui-implicit</finalName> | ||||
|         <resources> | ||||
|             <resource> | ||||
|                 <directory>src/main/resources</directory> | ||||
|                 <filtering>true</filtering> | ||||
|             </resource> | ||||
|         </resources> | ||||
|     </build> | ||||
| </project> | ||||
| @ -12,7 +12,7 @@ | ||||
| <oauth | ||||
|   site="http://localhost:8080/spring-security-oauth-server" | ||||
|   client-id="clientId" | ||||
|   redirect-uri="http://localhost:8080/spring-security-oauth-ui/index" | ||||
|   redirect-uri="http://localhost:8080/spring-security-oauth-ui-implicit/index" | ||||
|   scope="read" | ||||
|   template="oauthTemp"> | ||||
| </oauth> | ||||
| @ -0,0 +1,29 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||||
| <title>Spring Security OAuth</title> | ||||
| <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"/> | ||||
| </head> | ||||
| <body ng-app="myApp" ng-controller="mainCtrl"> | ||||
| 
 | ||||
| <div th:include="header"></div> | ||||
| 
 | ||||
| <div class="container"> | ||||
| <h1 class="col-sm-12">Foo Details</h1> | ||||
| <div class="col-sm-12"> | ||||
| 	<label class="col-sm-3">ID</label> | ||||
| 	<span>{{foo.id}}</span> | ||||
| </div> | ||||
| 
 | ||||
| <div class="col-sm-12"> | ||||
| <label class="col-sm-3">Name</label> | ||||
| <span>{{foo.name}}</span> | ||||
| </div> | ||||
| 
 | ||||
| <div class="col-sm-12"> | ||||
| <a class="btn btn-default" href="#" ng-click="getFoo()">New Foo</a> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
| @ -0,0 +1,32 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <classpath> | ||||
| 	<classpathentry kind="src" output="target/classes" path="src/main/java"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="src" output="target/test-classes" path="src/test/java"> | ||||
| 		<attributes> | ||||
| 			<attribute name="optional" value="true"/> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="output" path="target/classes"/> | ||||
| </classpath> | ||||
| @ -0,0 +1,48 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <projectDescription> | ||||
| 	<name>spring-security-oauth-ui-password</name> | ||||
| 	<comment></comment> | ||||
| 	<projects> | ||||
| 	</projects> | ||||
| 	<buildSpec> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.jdt.core.javabuilder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.wst.common.project.facet.core.builder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.m2e.core.maven2Builder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.springframework.ide.eclipse.core.springbuilder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.wst.validation.validationbuilder</name> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 	</buildSpec> | ||||
| 	<natures> | ||||
| 		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature> | ||||
| 		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> | ||||
| 		<nature>org.springframework.ide.eclipse.core.springnature</nature> | ||||
| 		<nature>org.eclipse.jdt.core.javanature</nature> | ||||
| 		<nature>org.eclipse.m2e.core.maven2Nature</nature> | ||||
| 		<nature>org.eclipse.wst.common.project.facet.core.nature</nature> | ||||
| 		<nature>org.eclipse.wst.jsdt.core.jsNature</nature> | ||||
| 	</natures> | ||||
| </projectDescription> | ||||
| @ -0,0 +1,36 @@ | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>spring-security-oauth-ui-password</artifactId> | ||||
| 
 | ||||
|     <name>spring-security-oauth-ui-password</name> | ||||
|     <packaging>war</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>org.baeldung</groupId> | ||||
|         <artifactId>spring-security-oauth</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
| 
 | ||||
| 		<dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-web</artifactId> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-thymeleaf</artifactId> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|      | ||||
|     <build> | ||||
|         <finalName>spring-security-oauth-ui-password</finalName> | ||||
|         <resources> | ||||
|             <resource> | ||||
|                 <directory>src/main/resources</directory> | ||||
|                 <filtering>true</filtering> | ||||
|             </resource> | ||||
|         </resources> | ||||
|     </build> | ||||
| </project> | ||||
| @ -0,0 +1,13 @@ | ||||
| package org.baeldung.config; | ||||
| 
 | ||||
| import org.springframework.boot.SpringApplication; | ||||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
| import org.springframework.boot.context.web.SpringBootServletInitializer; | ||||
| 
 | ||||
| @SpringBootApplication | ||||
| public class UiApplication extends SpringBootServletInitializer { | ||||
| 
 | ||||
|     public static void main(String[] args) { | ||||
|         SpringApplication.run(UiApplication.class, args); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,38 @@ | ||||
| package org.baeldung.config; | ||||
| 
 | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; | ||||
| import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; | ||||
| import org.springframework.web.servlet.config.annotation.EnableWebMvc; | ||||
| import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; | ||||
| import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; | ||||
| import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; | ||||
| 
 | ||||
| @Configuration | ||||
| @EnableWebMvc | ||||
| public class UiWebConfig extends WebMvcConfigurerAdapter { | ||||
| 
 | ||||
|     @Bean | ||||
|     public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { | ||||
|         return new PropertySourcesPlaceholderConfigurer(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { | ||||
|         configurer.enable(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void addViewControllers(final ViewControllerRegistry registry) { | ||||
|         super.addViewControllers(registry); | ||||
|         registry.addViewController("/index"); | ||||
|         registry.addViewController("/login"); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void addResourceHandlers(final ResourceHandlerRegistry registry) { | ||||
|         registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,2 @@ | ||||
| #server.context-path=/ui | ||||
| #server.port=8080 | ||||
| @ -0,0 +1,73 @@ | ||||
| <div> | ||||
| <nav class="navbar navbar-default"> | ||||
|   <div class="container-fluid"> | ||||
|     <div class="navbar-header"> | ||||
|       <a class="navbar-brand" th:href="@{/}">Spring Security OAuth</a> | ||||
|     </div> | ||||
|      | ||||
|   </div><!-- /.container-fluid --> | ||||
| </nav> | ||||
| 
 | ||||
| <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script> | ||||
| <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-resource.min.js"></script> | ||||
| <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-cookies.min.js"></script> | ||||
| <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js"></script> | ||||
| <script src="https://cdnjs.cloudflare.com/ajax/libs/ngStorage/0.3.9/ngStorage.min.js"></script> | ||||
| 
 | ||||
| 
 | ||||
| <script th:src="@{/resources/angular-utf8-base64.min.js}"></script> | ||||
| <script> | ||||
| /*<![CDATA[*/ | ||||
| var app = angular.module('myApp', ["ngResource","ngRoute","ngCookies"]); | ||||
| 
 | ||||
| app.controller('mainCtrl', function($scope,$resource,$http,$httpParamSerializer,$cookies) { | ||||
| 	$scope.foo = {id:0 , name:"sample foo"}; | ||||
| 	$scope.foos = $resource("http://localhost:8080/spring-security-oauth-resource/foos/:fooId",{fooId:'@id'}); | ||||
|      | ||||
| 	$scope.getFoo = function(){ | ||||
| 		$scope.foo = $scope.foos.get({fooId:$scope.foo.id}); | ||||
| 	} | ||||
| 	 | ||||
|     $scope.data = {grant_type:"password", username: "", password: "", client_id: "clientIdPassword"}; | ||||
|     $scope.encoded = btoa("clientIdPassword:secret"); | ||||
|      | ||||
|     var isLoginPage = window.location.href.indexOf("login") != -1; | ||||
|     if(isLoginPage){ | ||||
|     	if($cookies.get("access_token")){ | ||||
|             window.location.href = "index"; | ||||
|         }else{ | ||||
|             $http.defaults.headers.common.Authorization= 'Basic ' + $scope.encoded; | ||||
|         } | ||||
|     }else{ | ||||
|     	if($cookies.get("access_token")){ | ||||
|     		$http.defaults.headers.common.Authorization= 'Bearer ' + $cookies.get("access_token"); | ||||
|     	}else{ | ||||
|     		window.location.href = "login"; | ||||
|     	} | ||||
| 
 | ||||
|     } | ||||
|      | ||||
|     $scope.login = function() {    | ||||
|      	var req = { | ||||
|             method: 'POST', | ||||
|             url: "http://localhost:8080/spring-security-oauth-server/oauth/token", | ||||
|             headers: { | ||||
|                 "Authorization": "Basic " + $scope.encoded, | ||||
|                 "Content-type": "application/x-www-form-urlencoded; charset=utf-8" | ||||
|             }, | ||||
|             data: $httpParamSerializer($scope.data) | ||||
|         } | ||||
|         $http(req).then( | ||||
|         		function(data){ | ||||
|         			   $http.defaults.headers.common.Authorization= 'Bearer ' + data.data.access_token; | ||||
|         			   $cookies.put("access_token", data.data.access_token); | ||||
|         			   window.location.href="index"; | ||||
|         	    },function(){ | ||||
|         	    	console.log("error"); | ||||
|         	    });    | ||||
|    }  | ||||
|      | ||||
| }); | ||||
| /*]]>*/ | ||||
| </script> | ||||
| </div> | ||||
| @ -0,0 +1,34 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||||
| <title>Spring Security OAuth</title> | ||||
| <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"/> | ||||
| </head> | ||||
| <body ng-app="myApp" ng-controller="mainCtrl"> | ||||
| 
 | ||||
| <div th:include="header"></div> | ||||
| 
 | ||||
| <div class="container"> | ||||
| 
 | ||||
| <h1 class="col-sm-12">Login</h1> | ||||
| <div class="col-sm-6"> | ||||
| <div class="col-sm-12"> | ||||
| 	<label class="col-sm-3">Username</label> | ||||
| 	<input class="form-control" type="text" ng-model="data.username"/> | ||||
| </div> | ||||
| 
 | ||||
| <div class="col-sm-12"> | ||||
| <label class="col-sm-3">Password</label> | ||||
| <input class="form-control" type="password"  ng-model="data.password"/> | ||||
| </div> | ||||
| 
 | ||||
| <div class="col-sm-12"> | ||||
| <a class="btn btn-default" href="#" ng-click="login()">Login</a> | ||||
| </div> | ||||
| 
 | ||||
| </div> | ||||
| 
 | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
| @ -0,0 +1 @@ | ||||
| "use strict";angular.module("ab-base64",[]).constant("base64",function(){var a={alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",lookup:null,ie:/MSIE /.test(navigator.userAgent),ieo:/MSIE [67]/.test(navigator.userAgent),encode:function(b){var c,d,e,f,g=a.toUtf8(b),h=-1,i=g.length,j=[,,,];if(a.ie){for(c=[];++h<i;)d=g[h],e=g[++h],j[0]=d>>2,j[1]=(3&d)<<4|e>>4,isNaN(e)?j[2]=j[3]=64:(f=g[++h],j[2]=(15&e)<<2|f>>6,j[3]=isNaN(f)?64:63&f),c.push(a.alphabet.charAt(j[0]),a.alphabet.charAt(j[1]),a.alphabet.charAt(j[2]),a.alphabet.charAt(j[3]));return c.join("")}for(c="";++h<i;)d=g[h],e=g[++h],j[0]=d>>2,j[1]=(3&d)<<4|e>>4,isNaN(e)?j[2]=j[3]=64:(f=g[++h],j[2]=(15&e)<<2|f>>6,j[3]=isNaN(f)?64:63&f),c+=a.alphabet[j[0]]+a.alphabet[j[1]]+a.alphabet[j[2]]+a.alphabet[j[3]];return c},decode:function(b){if(b=b.replace(/\s/g,""),b.length%4)throw new Error("InvalidLengthError: decode failed: The string to be decoded is not the correct length for a base64 encoded string.");if(/[^A-Za-z0-9+\/=\s]/g.test(b))throw new Error("InvalidCharacterError: decode failed: The string contains characters invalid in a base64 encoded string.");var c,d=a.fromUtf8(b),e=0,f=d.length;if(a.ieo){for(c=[];f>e;)c.push(d[e]<128?String.fromCharCode(d[e++]):d[e]>191&&d[e]<224?String.fromCharCode((31&d[e++])<<6|63&d[e++]):String.fromCharCode((15&d[e++])<<12|(63&d[e++])<<6|63&d[e++]));return c.join("")}for(c="";f>e;)c+=String.fromCharCode(d[e]<128?d[e++]:d[e]>191&&d[e]<224?(31&d[e++])<<6|63&d[e++]:(15&d[e++])<<12|(63&d[e++])<<6|63&d[e++]);return c},toUtf8:function(a){var b,c=-1,d=a.length,e=[];if(/^[\x00-\x7f]*$/.test(a))for(;++c<d;)e.push(a.charCodeAt(c));else for(;++c<d;)b=a.charCodeAt(c),128>b?e.push(b):2048>b?e.push(b>>6|192,63&b|128):e.push(b>>12|224,b>>6&63|128,63&b|128);return e},fromUtf8:function(b){var c,d=-1,e=[],f=[,,,];if(!a.lookup){for(c=a.alphabet.length,a.lookup={};++d<c;)a.lookup[a.alphabet.charAt(d)]=d;d=-1}for(c=b.length;++d<c&&(f[0]=a.lookup[b.charAt(d)],f[1]=a.lookup[b.charAt(++d)],e.push(f[0]<<2|f[1]>>4),f[2]=a.lookup[b.charAt(++d)],64!==f[2])&&(e.push((15&f[1])<<4|f[2]>>2),f[3]=a.lookup[b.charAt(++d)],64!==f[3]);)e.push((3&f[2])<<6|f[3]);return e}},b={decode:function(b){b=b.replace(/-/g,"+").replace(/_/g,"/");var c=b.length%4;if(c){if(1===c)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");b+=new Array(5-c).join("=")}return a.decode(b)},encode:function(b){var c=a.encode(b);return c.replace(/\+/g,"-").replace(/\//g,"_").split("=",1)[0]}};return{decode:a.decode,encode:a.encode,urldecode:b.decode,urlencode:b.encode}}()); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user