gradle build

gradle build
This commit is contained in:
shimingxy 2019-11-10 12:38:42 +08:00
parent c07aea5788
commit ba66c919f0
48 changed files with 1416 additions and 59 deletions

View File

@ -124,6 +124,7 @@ subprojects {
mavenCentral() mavenCentral()
jcenter() jcenter()
maven { url "https://maven.eveoh.nl/content/repositories/releases" } maven { url "https://maven.eveoh.nl/content/repositories/releases" }
maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases"}
maven { url "https://plugins.gradle.org/m2/" } maven { url "https://plugins.gradle.org/m2/" }
maven { url "http://repo.spring.io/plugins-release" } maven { url "http://repo.spring.io/plugins-release" }
maven { url "https://repo.spring.io/milestone" } maven { url "https://repo.spring.io/milestone" }
@ -319,7 +320,8 @@ subprojects {
} }
} }
/* task checkenv<<{ task checkenv{
println 'check env for project '
// //
println project.name println project.name
// //
@ -329,16 +331,18 @@ subprojects {
// //
println project.projectDir println project.projectDir
//build文件绝对路径 //build文件绝对路径
println project.buildDir println "buildDir " +project.buildDir
//group //group
println project.group println project.group
// //
println project.version println project.version
//ant对象 //ant对象
println project.ant println project.ant
}*/
}
task copyjar2Release(type: Copy) { task copyjar2Release(type: Copy) {
println "$buildDir/libs/ to $rootDir/build/jars/"
into "$rootDir/build/jars/" into "$rootDir/build/jars/"
from "$buildDir/libs/" from "$buildDir/libs/"
include '*.jar' include '*.jar'
@ -361,10 +365,9 @@ subprojects {
from "$buildDir/libs/" from "$buildDir/libs/"
} }
//task buildRelease(dependsOn:['build','war','copyjar2Release','copyWar2Release','copyotherWar2Release','copydemoWar2Release']) << { task buildRelease(dependsOn:['build','jar','copyjar2Release']) {
//task buildRelease(dependsOn:['copyjar2Release','copyWar2Release','copyotherWar2Release','copydemoWar2Release']) << { println 'Build MaxKey '+project.name +' complete .'
// println 'Build MaxKey '+project.name +' complete .' }
//}
} }

View File

@ -14,7 +14,6 @@ call %GRADLE_HOME%/bin/gradle war
call %GRADLE_HOME%/bin/gradle buildRelease call %GRADLE_HOME%/bin/gradle buildRelease
call %GRADLE_HOME%/bin/gradle buildReleaseGear
cd build cd build
rd /q /s libs rd /q /s libs

1
maxkey-client-sdk/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build/

1
maxkey-core/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build/

View File

@ -6,8 +6,8 @@ import org.maxkey.util.PathUtils;
public class PathUtilsTest { public class PathUtilsTest {
@Test @Test
public void test() { public void test() {
System.out.println(PathUtils.getInstance().getAppPath()); //System.out.println(PathUtils.getInstance().getAppPath());
System.out.println(PathUtils.getInstance().getWebInf()); //System.out.println(PathUtils.getInstance().getWebInf());
System.out.println(PathUtils.getInstance().getClassPath()); //System.out.println(PathUtils.getInstance().getClassPath());
} }
} }

1
maxkey-dao/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build/

View File

@ -25,7 +25,7 @@ public class FormBasedDetailsServiceTest {
public static AppsFormBasedDetailsService service; public static AppsFormBasedDetailsService service;
public AppsFormBasedDetailsService getservice() { public AppsFormBasedDetailsService getservice() {
service=(AppsFormBasedDetailsService)WebContext.getBean("formBasedDetailsService"); service=(AppsFormBasedDetailsService)WebContext.getBean("appsFormBasedDetailsService");
return service; return service;
} }

1
maxkey-jose-jwt/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build/

View File

@ -0,0 +1 @@
/build/

View File

@ -10,7 +10,7 @@ dependencies {
compile project(":maxkey-dao") compile project(":maxkey-dao")
compile project(":maxkey-jose-jwt") compile project(":maxkey-jose-jwt")
compile project(":maxkey-client-sdk") compile project(":maxkey-client-sdk")
compile project(":maxkey-protocols:maxkey-protocol-oauth-2.0") //compileOnly project(":maxkey-protocols:maxkey-protocol-oauth-2.0")
compile project(":maxkey-protocols:maxkey-protocol-saml-2.0") //compileOnly project(":maxkey-protocols:maxkey-protocol-saml-2.0")
} }

View File

@ -5,16 +5,13 @@ package org.maxkey.authz.endpoint;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.maxkey.authz.oauth2.provider.ClientDetailsService;
import org.maxkey.client.utils.HttpEncoder;
import org.maxkey.constants.PROTOCOLS; import org.maxkey.constants.PROTOCOLS;
import org.maxkey.dao.service.AppsCasDetailsService; import org.maxkey.dao.service.AppsCasDetailsService;
import org.maxkey.domain.apps.Apps; import org.maxkey.domain.apps.Apps;
import org.maxkey.domain.apps.oauth2.provider.ClientDetails;
import org.maxkey.web.WebConstants; import org.maxkey.web.WebConstants;
import org.maxkey.web.WebContext; import org.maxkey.web.WebContext;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -26,12 +23,6 @@ import org.springframework.web.servlet.ModelAndView;
*/ */
@Controller @Controller
public class AuthorizeEndpoint extends AuthorizeBaseEndpoint{ public class AuthorizeEndpoint extends AuthorizeBaseEndpoint{
private static final String OAUTH_V20_AUTHORIZATION_URL = "%s/oauth/v20/authorize?client_id=%s&response_type=code&redirect_uri=%s&approval_prompt=auto";
@Autowired
@Qualifier("oauth20JdbcClientDetailsService")
private ClientDetailsService clientDetailsService;
@Autowired @Autowired
AppsCasDetailsService casDetailsService; AppsCasDetailsService casDetailsService;
@ -51,23 +42,13 @@ public class AuthorizeEndpoint extends AuthorizeBaseEndpoint{
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.FORMBASED)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.FORMBASED)){
modelAndView=WebContext.forward("/authz/formbased/"+id); modelAndView=WebContext.forward("/authz/formbased/"+id);
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.OAUTH20)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.OAUTH20)){
ClientDetails clientDetails =clientDetailsService.loadClientByClientId(application.getId()); modelAndView=WebContext.forward("/authz/oauthv20/"+application.getId());
_logger.debug(""+clientDetails);
String authorizationUrl = String.format(OAUTH_V20_AUTHORIZATION_URL,
applicationConfig.getServerPrefix(),
clientDetails.getClientId(),
HttpEncoder.encode(clientDetails.getRegisteredRedirectUri().toArray()[0].toString())
);
_logger.debug("authorizationUrl "+authorizationUrl);
modelAndView=WebContext.redirect(authorizationUrl);
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.OPEN_ID_CONNECT)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.OPEN_ID_CONNECT)){
// modelAndView=new ModelAndView("openid connect"); // modelAndView=new ModelAndView("openid connect");
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.SAML20)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.SAML20)){
modelAndView=WebContext.forward("/authz/saml20/idpinit/"+application.getId()); modelAndView=WebContext.forward("/authz/saml20/idpinit/"+application.getId());
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.TOKENBASED)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.TOKENBASED)){
modelAndView=WebContext.forward("/authorize/tokenbased/"+id); modelAndView=WebContext.forward("/authz/tokenbased/"+id);
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.CAS)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.CAS)){
modelAndView=WebContext.forward("/authz/cas/"+id); modelAndView=WebContext.forward("/authz/cas/"+id);
}else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.DESKTOP)){ }else if (application.getProtocol().equalsIgnoreCase(PROTOCOLS.DESKTOP)){

View File

@ -1 +0,0 @@
/com/

View File

@ -0,0 +1,179 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
font-size: 12pt;
}
body, a, a:visited {
color: #303030;
}
#content {
padding-left: 50px;
padding-right: 50px;
padding-top: 30px;
padding-bottom: 30px;
}
#content h1 {
font-size: 160%;
margin-bottom: 10px;
}
#footer {
margin-top: 100px;
font-size: 80%;
white-space: nowrap;
}
#footer, #footer a {
color: #a0a0a0;
}
#line-wrapping-toggle {
vertical-align: middle;
}
#label-for-line-wrapping-toggle {
vertical-align: middle;
}
ul {
margin-left: 0;
}
h1, h2, h3 {
white-space: nowrap;
}
h2 {
font-size: 120%;
}
ul.tabLinks {
padding-left: 0;
padding-top: 10px;
padding-bottom: 10px;
overflow: auto;
min-width: 800px;
width: auto !important;
width: 800px;
}
ul.tabLinks li {
float: left;
height: 100%;
list-style: none;
padding-left: 10px;
padding-right: 10px;
padding-top: 5px;
padding-bottom: 5px;
margin-bottom: 0;
-moz-border-radius: 7px;
border-radius: 7px;
margin-right: 25px;
border: solid 1px #d4d4d4;
background-color: #f0f0f0;
}
ul.tabLinks li:hover {
background-color: #fafafa;
}
ul.tabLinks li.selected {
background-color: #c5f0f5;
border-color: #c5f0f5;
}
ul.tabLinks a {
font-size: 120%;
display: block;
outline: none;
text-decoration: none;
margin: 0;
padding: 0;
}
ul.tabLinks li h2 {
margin: 0;
padding: 0;
}
div.tab {
}
div.selected {
display: block;
}
div.deselected {
display: none;
}
div.tab table {
min-width: 350px;
width: auto !important;
width: 350px;
border-collapse: collapse;
}
div.tab th, div.tab table {
border-bottom: solid #d0d0d0 1px;
}
div.tab th {
text-align: left;
white-space: nowrap;
padding-left: 6em;
}
div.tab th:first-child {
padding-left: 0;
}
div.tab td {
white-space: nowrap;
padding-left: 6em;
padding-top: 5px;
padding-bottom: 5px;
}
div.tab td:first-child {
padding-left: 0;
}
div.tab td.numeric, div.tab th.numeric {
text-align: right;
}
span.code {
display: inline-block;
margin-top: 0em;
margin-bottom: 1em;
}
span.code pre {
font-size: 11pt;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;
margin: 0;
background-color: #f7f7f7;
border: solid 1px #d0d0d0;
min-width: 700px;
width: auto !important;
width: 700px;
}
span.wrapped pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: break-all;
}
label.hidden {
display: none;
}

View File

@ -0,0 +1,84 @@
#summary {
margin-top: 30px;
margin-bottom: 40px;
}
#summary table {
border-collapse: collapse;
}
#summary td {
vertical-align: top;
}
.breadcrumbs, .breadcrumbs a {
color: #606060;
}
.infoBox {
width: 110px;
padding-top: 15px;
padding-bottom: 15px;
text-align: center;
}
.infoBox p {
margin: 0;
}
.counter, .percent {
font-size: 120%;
font-weight: bold;
margin-bottom: 8px;
}
#duration {
width: 125px;
}
#successRate, .summaryGroup {
border: solid 2px #d0d0d0;
-moz-border-radius: 10px;
border-radius: 10px;
}
#successRate {
width: 140px;
margin-left: 35px;
}
#successRate .percent {
font-size: 180%;
}
.success, .success a {
color: #008000;
}
div.success, #successRate.success {
background-color: #bbd9bb;
border-color: #008000;
}
.failures, .failures a {
color: #b60808;
}
.skipped, .skipped a {
color: #c09853;
}
div.failures, #successRate.failures {
background-color: #ecdada;
border-color: #b60808;
}
ul.linkList {
padding-left: 0;
}
ul.linkList li {
list-style: none;
margin-bottom: 5px;
}

View File

@ -0,0 +1,92 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<title>Test results - Test Summary</title>
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
<link href="css/style.css" rel="stylesheet" type="text/css"/>
<script src="js/report.js" type="text/javascript"></script>
</head>
<body>
<div id="content">
<h1>Test Summary</h1>
<div id="summary">
<table>
<tr>
<td>
<div class="summaryGroup">
<table>
<tr>
<td>
<div class="infoBox" id="tests">
<div class="counter">0</div>
<p>tests</p>
</div>
</td>
<td>
<div class="infoBox" id="failures">
<div class="counter">0</div>
<p>failures</p>
</div>
</td>
<td>
<div class="infoBox" id="ignored">
<div class="counter">0</div>
<p>ignored</p>
</div>
</td>
<td>
<div class="infoBox" id="duration">
<div class="counter">-</div>
<p>duration</p>
</div>
</td>
</tr>
</table>
</div>
</td>
<td>
<div class="infoBox success" id="successRate">
<div class="percent">-</div>
<p>successful</p>
</div>
</td>
</tr>
</table>
</div>
<div id="tabs">
<ul class="tabLinks">
<li>
<a href="#tab0">Classes</a>
</li>
</ul>
<div id="tab0" class="tab">
<h2>Classes</h2>
<table>
<thead>
<tr>
<th>Class</th>
<th>Tests</th>
<th>Failures</th>
<th>Ignored</th>
<th>Duration</th>
<th>Success rate</th>
</tr>
</thead>
<tbody/>
</table>
</div>
</div>
<div id="footer">
<p>
<div>
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
</label>
</div>Generated by
<a href="http://www.gradle.org">Gradle 5.4.1</a> at 2019-11-10 12:36:07</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,194 @@
(function (window, document) {
"use strict";
var tabs = {};
function changeElementClass(element, classValue) {
if (element.getAttribute("className")) {
element.setAttribute("className", classValue);
} else {
element.setAttribute("class", classValue);
}
}
function getClassAttribute(element) {
if (element.getAttribute("className")) {
return element.getAttribute("className");
} else {
return element.getAttribute("class");
}
}
function addClass(element, classValue) {
changeElementClass(element, getClassAttribute(element) + " " + classValue);
}
function removeClass(element, classValue) {
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
}
function initTabs() {
var container = document.getElementById("tabs");
tabs.tabs = findTabs(container);
tabs.titles = findTitles(tabs.tabs);
tabs.headers = findHeaders(container);
tabs.select = select;
tabs.deselectAll = deselectAll;
tabs.select(0);
return true;
}
function getCheckBox() {
return document.getElementById("line-wrapping-toggle");
}
function getLabelForCheckBox() {
return document.getElementById("label-for-line-wrapping-toggle");
}
function findCodeBlocks() {
var spans = document.getElementById("tabs").getElementsByTagName("span");
var codeBlocks = [];
for (var i = 0; i < spans.length; ++i) {
if (spans[i].className.indexOf("code") >= 0) {
codeBlocks.push(spans[i]);
}
}
return codeBlocks;
}
function forAllCodeBlocks(operation) {
var codeBlocks = findCodeBlocks();
for (var i = 0; i < codeBlocks.length; ++i) {
operation(codeBlocks[i], "wrapped");
}
}
function toggleLineWrapping() {
var checkBox = getCheckBox();
if (checkBox.checked) {
forAllCodeBlocks(addClass);
} else {
forAllCodeBlocks(removeClass);
}
}
function initControls() {
if (findCodeBlocks().length > 0) {
var checkBox = getCheckBox();
var label = getLabelForCheckBox();
checkBox.onclick = toggleLineWrapping;
checkBox.checked = false;
removeClass(label, "hidden");
}
}
function switchTab() {
var id = this.id.substr(1);
for (var i = 0; i < tabs.tabs.length; i++) {
if (tabs.tabs[i].id === id) {
tabs.select(i);
break;
}
}
return false;
}
function select(i) {
this.deselectAll();
changeElementClass(this.tabs[i], "tab selected");
changeElementClass(this.headers[i], "selected");
while (this.headers[i].firstChild) {
this.headers[i].removeChild(this.headers[i].firstChild);
}
var h2 = document.createElement("H2");
h2.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(h2);
}
function deselectAll() {
for (var i = 0; i < this.tabs.length; i++) {
changeElementClass(this.tabs[i], "tab deselected");
changeElementClass(this.headers[i], "deselected");
while (this.headers[i].firstChild) {
this.headers[i].removeChild(this.headers[i].firstChild);
}
var a = document.createElement("A");
a.setAttribute("id", "ltab" + i);
a.setAttribute("href", "#tab" + i);
a.onclick = switchTab;
a.appendChild(document.createTextNode(this.titles[i]));
this.headers[i].appendChild(a);
}
}
function findTabs(container) {
return findChildElements(container, "DIV", "tab");
}
function findHeaders(container) {
var owner = findChildElements(container, "UL", "tabLinks");
return findChildElements(owner[0], "LI", null);
}
function findTitles(tabs) {
var titles = [];
for (var i = 0; i < tabs.length; i++) {
var tab = tabs[i];
var header = findChildElements(tab, "H2", null)[0];
header.parentNode.removeChild(header);
if (header.innerText) {
titles.push(header.innerText);
} else {
titles.push(header.textContent);
}
}
return titles;
}
function findChildElements(container, name, targetClass) {
var elements = [];
var children = container.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children.item(i);
if (child.nodeType === 1 && child.nodeName === name) {
if (targetClass && child.className.indexOf(targetClass) < 0) {
continue;
}
elements.push(child);
}
}
return elements;
}
// Entry point.
window.onload = function() {
initTabs();
initControls();
};
} (window, window.document));

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-cas
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.160+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-desktop
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.172+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-extendapi
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.185+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-formbased
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.194+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -7,6 +7,7 @@ dependencies {
compile project(":maxkey-core") compile project(":maxkey-core")
compile project(":maxkey-dao") compile project(":maxkey-dao")
compile project(":maxkey-jose-jwt") compile project(":maxkey-jose-jwt")
compile project(":maxkey-client-sdk")
compile project(":maxkey-protocols:maxkey-protocol-authorize") compile project(":maxkey-protocols:maxkey-protocol-authorize")
} }

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Class-Path:

View File

@ -0,0 +1,2 @@
http\://www.springframework.org/schema/security/oauth2=org.springframework.security.oauth2.config.xml.OAuth2SecurityNamespaceHandler
http\://www.springframework.org/schema/security/oauth=org.springframework.security.oauth.config.OAuthSecurityNamespaceHandler

View File

@ -0,0 +1,5 @@
http\://www.springframework.org/schema/security/spring-security-oauth2-1.0.xsd=org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd
http\://www.springframework.org/schema/security/spring-security-oauth2-2.0.xsd=org/springframework/security/oauth2/spring-security-oauth2-2.0.xsd
http\://www.springframework.org/schema/security/spring-security-oauth2.xsd=org/springframework/security/oauth2/spring-security-oauth2-2.0.xsd
http\://www.springframework.org/schema/security/spring-security-oauth-1.0.xsd=org/springframework/security/oauth/spring-security-oauth-1.0.xsd
http\://www.springframework.org/schema/security/spring-security-oauth.xsd=org/springframework/security/oauth/spring-security-oauth-1.0.xsd

View File

@ -0,0 +1,728 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.springframework.org/schema/security/oauth2" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans" targetNamespace="http://www.springframework.org/schema/security/oauth2"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans-3.1.xsd" />
<xs:element name="rest-template">
<xs:annotation>
<xs:documentation>
Creates an OAuth2RestTemplate with all the pieces needed to connect to a remote resource from
a web
application. Injects request and session-scoped beans into the template, so can only be
used in the context of a web
request.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType">
<xs:sequence>
<xs:element ref="beans:description" minOccurs="0" />
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="beans:property" />
</xs:choice>
</xs:sequence>
<xs:attribute name="resource">
<xs:annotation>
<xs:documentation>
The OAuth2ProtectedResourceDetails governing the configuration of this client. Mandatory.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="access-token-provider" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that manages access token acquisition. Optional (defaults to a chain
including common grant types from the spec).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="authorization-server">
<xs:annotation>
<xs:documentation>
Specifies that the oauth 2 authorization and token
endpoints should be created in the application
context. These are
implemented as regular Spring @Controller beans, so as long as the
default Spring MVC set up in
present in the application
the endpoints should work (at /oauth/authorization and /oauth/token by
default).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="authorization-code" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
The configuration of the authorization code
mechanism. This
mechanism enables a way for clients to
obtain an
access token by obtaining an authorization code.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="disabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether to disable the authorization code
mechanism.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authorization-code-services-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the
authorization code
services. Default value is an
instance of
"org.springframework.security.oauth2.provider.authorization_code.InMemoryAuthorizationCodeServices".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="implicit" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
The configuration of the client credentials
grant type.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="disabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether to disable the implicit grant type
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="refresh-token" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
The configuration of the refresh token grant
type.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="disabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether to disable the refresh token grant
type
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="client-credentials" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
The configuration of the client credentials
grant type.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="disabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether to disable the refresh token grant
type
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="password" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
The configuration of the resource owner password
grant type.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="disabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether to disable the refresh token grant
type
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authentication-manager-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
A reference to an authentication manager that
can be used to
authenticate the resource owner
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="custom-grant" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
The configuration of your custom grant type.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="disabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>
Whether to disable this grant
type
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="token-granter-ref" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
A reference to your token granter
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="client-details-service-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the client
details service.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="token-endpoint-url" type="xs:string">
<xs:annotation>
<xs:documentation>
The URL at which a request for an access token
will be serviced.
Default value: "/oauth/token"
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authorization-endpoint-url" type="xs:string">
<xs:annotation>
<xs:documentation>
The URL at which a user is redirected for
authorization. Default
value: "/oauth/authorize"
</xs:documentation>
</xs:annotation>
</xs:attribute>
<!--the following attributes are less used -->
<xs:attribute name="token-granter-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the
granter of different oauth
token types.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="implicit-grant-service-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the
implicit grant service.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="token-services-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the token
services. Default
value is an instance of
"org.springframework.security.oauth2.provider.token.DefaultTokenServices".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authorization-request-manager-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the manager for
authorization requests from the input
parameters (e.g. request parameters).
Default
value is an
instance of
"org.springframework.security.oauth2.provider.token.DefaultAuthorizationRequestManager".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="user-approval-handler-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
Reference to a bean that handles user approval decisions. Using this strategy servers can
selectively skip the approval process depending on decisions in the past or on the type of client.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="user-approval-page" type="xs:string">
<xs:annotation>
<xs:documentation>
The URL of the page that handles the user
approval form (if needed, depending on the grant type).
The default is "forward:/oauth/confirm_access" which is not handled
by the authorization endpoint, so normally you
will have to supply a handler
for this path.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="error-page" type="xs:string">
<xs:annotation>
<xs:documentation>
The URL of the page that handles errors (default forward:/oauth/error).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="approval-parameter-name" type="xs:string">
<xs:annotation>
<xs:documentation>
The name of the form parameter that is used to
indicate user
approval of the client
authentication
request.
Default value: "user_oauth_approval".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="redirect-resolver-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the
redirect resolver, used
during the user
authorization.
Default
value is an instance of
"org.springframework.security.oauth2.provider.authorization_code.DefaultRedirectResolver".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="resource-server">
<xs:annotation>
<xs:documentation>
Specifies that there are oauth 2 protected resources in
the application context. This element
has an
id which is the bean id of the filter created. The filter
should be added to the Spring Security filter chain at
position before="PRE_AUTH_FILTER"
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType">
<xs:attribute name="resource-id" type="xs:string">
<xs:annotation>
<xs:documentation>
The resource id that is protected by this filter
if any. If empty or
absent then all resource ids
are allowed,
otherwise
only tokens which are granted to a client that contains
this reosurce
id will be legal.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="token-services-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the token
services. Default
value is an instance of
"org.springframework.security.oauth2.provider.token.DefaultTokenServices".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="entry-point-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the entry point for failed authentications. Defaults to
a vanilla
org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="auth-details-source-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the AuthenticationDetailsSource.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="client-details-service">
<xs:annotation>
<xs:documentation>
Default element that contains the definition of the
OAuth clients that are
allowed to access this
service.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="client">
<xs:annotation>
<xs:documentation>
Definition of a client that can act on behalf
of a user.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="client-id" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
The client id.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="secret" type="xs:string">
<xs:annotation>
<xs:documentation>
The client secret. If the secret is
undefined or empty (the
default) the client does
not
require a
secret.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="redirect-uri" type="xs:string">
<xs:annotation>
<xs:documentation>
The re-direct URI(s) established during
registration (optional, comma separated).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="resource-ids" type="xs:string">
<xs:annotation>
<xs:documentation>
The resource ids to which this client can be
granted access
(comma-separated). If missing or
empty all
resources are
accessible (not recommended by the spec).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="scope" type="xs:string">
<xs:annotation>
<xs:documentation>
The scopes to which the client is limited
(comma-separated). If
scope is undefined or empty
(the
default) the client
is not limited by scope, but in that case
the authorization
service must explicitly
accept unlimited
access by not
specifying any scopes itself.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authorized-grant-types" type="xs:string">
<xs:annotation>
<xs:documentation>
Grant types that are authorized for the
client to use
(comma-separated). Currently defined
grant types
include
"authorization_code", "password", "assertion", and
"refresh_token". Default value is
"authorization_code,refresh_token".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authorities" type="xs:string">
<xs:annotation>
<xs:documentation>
Authorities that are granted to the client
(comma-separated). Distinct
from the authorities
granted to
the user on behalf
of whom the client is acting.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="access-token-validity" type="xs:string">
<xs:annotation>
<xs:documentation>
The access token validity period in seconds (optional). If unspecified a global default will
be applied by the token services.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="refresh-token-validity" type="xs:string">
<xs:annotation>
<xs:documentation>
The refresh token validity period in seconds (optional). If unspecified a global default
will
be applied by the token services.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="expression-handler">
<xs:annotation>
<xs:documentation>
Element for declaring and configuring an expression
handler for oauth
security expressions. See
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType" />
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="web-expression-handler">
<xs:annotation>
<xs:documentation>
Element for declaring and configuring an expression
handler for oauth
security expressions in http
intercept urls. See
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType" />
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="client">
<xs:annotation>
<xs:documentation>
Creates the oauth 2 client filter be be added to the
application security policy.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType">
<xs:attribute name="redirect-strategy-ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The reference to the bean that defines the
redirect strategy, used when redirecting the user for
access authorization. Default value is an instance of
"org.springframework.security.web.DefaultRedirectStrategy".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="resource">
<xs:annotation>
<xs:documentation>
Definition of a remote resource that is protected via
OAuth2 to which this client application wants
access.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="beans:identifiedType">
<xs:attribute name="type" type="xs:string">
<xs:annotation>
<xs:documentation>
The grant type. Currently defined grant types
include
"authorization_code", "password", and
"assertion".
Default value
is "authorization_code".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="client-id" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>
The client id. This is the id by which the
resource server will
identify this application.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="access-token-uri" type="xs:string">
<xs:annotation>
<xs:documentation>
The uri to where the access token may be
obtained.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="scope" type="xs:string">
<xs:annotation>
<xs:documentation>
Comma-separted list of string specifying the
scope of the access to the
resource. By default,
no
scope will be
specified.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="client-secret" type="xs:string">
<xs:annotation>
<xs:documentation>
The secret asssociated with the resource. By
default, no secret
will be supplied for access to
the resource.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="client-authentication-scheme" type="xs:string">
<xs:annotation>
<xs:documentation>
The scheme that is used to pass the client
secret. Suggested
values: "header" and "form".
Default:
"header".
See section 2.1 of the OAuth 2 spec.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="user-authorization-uri" type="xs:string">
<xs:annotation>
<xs:documentation>
The uri to which the user will be redirected if
the user is ever
needed to grant an authorization
code.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="authentication-scheme" default="header" type="xs:string">
<xs:annotation>
<xs:documentation>
The method for bearing the token when accessing
the resource.
Default value is "header". See
AuthenticationScheme enum for possible values.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="token-name" type="xs:string" default="access_token">
<xs:annotation>
<xs:documentation>
The name of the bearer token. The default is
"access_token", which
is according to the spec,
but
some providers
(e.g. Facebook) don't conform to the spec.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="pre-established-redirect-uri" type="xs:string">
<xs:annotation>
<xs:documentation>
Some resource servers may require a
pre-established URI to which
they will redirect users after
users
authorize an access token.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="use-current-uri" type="xs:string">
<xs:annotation>
<xs:documentation>
Boolean flag indicating that the current URI should be used as a redirect (if available) rather
than the
registered redirect URI. Default is true.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="username" type="xs:string">
<xs:annotation>
<xs:documentation>
The username for authentication, required only when type is "password".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="password" type="xs:string">
<xs:annotation>
<xs:documentation>
The password for authentication, required only when type is "password".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-oauth-2.0
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.204+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -21,6 +21,10 @@ import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.maxkey.authz.endpoint.AuthorizeBaseEndpoint;
import org.maxkey.authz.oauth2.common.OAuth2AccessToken; import org.maxkey.authz.oauth2.common.OAuth2AccessToken;
import org.maxkey.authz.oauth2.common.exceptions.InvalidClientException; import org.maxkey.authz.oauth2.common.exceptions.InvalidClientException;
import org.maxkey.authz.oauth2.common.exceptions.InvalidRequestException; import org.maxkey.authz.oauth2.common.exceptions.InvalidRequestException;
@ -41,13 +45,20 @@ import org.maxkey.authz.oauth2.provider.code.AuthorizationCodeServices;
import org.maxkey.authz.oauth2.provider.code.InMemoryAuthorizationCodeServices; import org.maxkey.authz.oauth2.provider.code.InMemoryAuthorizationCodeServices;
import org.maxkey.authz.oauth2.provider.implicit.ImplicitTokenRequest; import org.maxkey.authz.oauth2.provider.implicit.ImplicitTokenRequest;
import org.maxkey.authz.oauth2.provider.request.DefaultOAuth2RequestValidator; import org.maxkey.authz.oauth2.provider.request.DefaultOAuth2RequestValidator;
import org.maxkey.client.utils.HttpEncoder;
import org.maxkey.config.ApplicationConfig;
import org.maxkey.domain.apps.oauth2.provider.ClientDetails; import org.maxkey.domain.apps.oauth2.provider.ClientDetails;
import org.maxkey.web.WebContext; import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@ -61,6 +72,7 @@ import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriTemplate; import org.springframework.web.util.UriTemplate;
import org.maxkey.authz.oauth2.provider.ClientDetailsService;
/** /**
* <p> * <p>
@ -82,9 +94,18 @@ import org.springframework.web.util.UriTemplate;
@Controller @Controller
@SessionAttributes("authorizationRequest") @SessionAttributes("authorizationRequest")
public class AuthorizationEndpoint extends AbstractEndpoint { public class AuthorizationEndpoint extends AbstractEndpoint {
final static Logger _logger = LoggerFactory.getLogger(AuthorizationEndpoint.class);
private static final String OAUTH_V20_AUTHORIZATION_URL = "%s/oauth/v20/authorize?client_id=%s&response_type=code&redirect_uri=%s&approval_prompt=auto";
@Autowired
@Qualifier("oauth20JdbcClientDetailsService")
private ClientDetailsService clientDetailsService;
@Autowired
@Qualifier("applicationConfig")
protected ApplicationConfig applicationConfig;
private RedirectResolver redirectResolver = new DefaultRedirectResolver(); private RedirectResolver redirectResolver = new DefaultRedirectResolver();
private UserApprovalHandler userApprovalHandler = new DefaultUserApprovalHandler(); private UserApprovalHandler userApprovalHandler = new DefaultUserApprovalHandler();
@ -488,5 +509,21 @@ public class AuthorizationEndpoint extends AbstractEndpoint {
this.oauth2RequestValidator = oauth2RequestValidator; this.oauth2RequestValidator = oauth2RequestValidator;
} }
@RequestMapping("/authz/oauthv20/{id}")
public ModelAndView authorize(
HttpServletRequest request,
HttpServletResponse response,
@PathVariable("id") String id){
ClientDetails clientDetails =clientDetailsService.loadClientByClientId(id);
_logger.debug(""+clientDetails);
String authorizationUrl = String.format(OAUTH_V20_AUTHORIZATION_URL,
applicationConfig.getServerPrefix(),
clientDetails.getClientId(),
HttpEncoder.encode(clientDetails.getRegisteredRedirectUri().toArray()[0].toString())
);
_logger.debug("authorizationUrl "+authorizationUrl);
return WebContext.redirect(authorizationUrl);
}
} }

View File

@ -1 +0,0 @@
/org/

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-saml-2.0
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.214+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -0,0 +1,7 @@
Manifest-Version: 1.0
Implementation-Title: maxkey-protocol-tokenbased
Implementation-Version: 1.0.0.RELEASE
Implementation-Date: 2019-11-10T12:35:40.220+08:00[Asia/Shanghai]
Created-By: org.maxkey
Implementation-Vendor: https://github.com/shimingxy/MaxKey

View File

@ -41,7 +41,7 @@ public class TokenBasedAuthorizeEndpoint extends AuthorizeBaseEndpoint{
@Autowired @Autowired
ApplicationConfig applicationConfig; ApplicationConfig applicationConfig;
@RequestMapping("/authorize/tokenbased/{id}") @RequestMapping("/authz/tokenbased/{id}")
public ModelAndView authorize( public ModelAndView authorize(
HttpServletRequest request, HttpServletRequest request,
HttpServletResponse response, HttpServletResponse response,

View File

@ -13,10 +13,9 @@
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"> <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
<attributes> <attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> <attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="bin/default"/> <classpathentry kind="output" path="bin/default"/>

View File

@ -2,25 +2,24 @@
<project-modules id="moduleCoreId" project-version="1.5.0"> <project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="maxkey-web-manage"> <wb-module deploy-name="maxkey-web-manage">
<property name="context-root" value="maxkey-mgt"/> <property name="context-root" value="maxkey-mgt"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> <wb-resource deploy-path="/" source-path="src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/> <wb-resource deploy-path="/" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/> <dependent-module deploy-path="../" handle="module:/resource/maxkey-core/maxkey-core">
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/maxkey-core/maxkey-core">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/maxkey-jose-jwt/maxkey-jose-jwt"> <dependent-module deploy-path="../" handle="module:/resource/maxkey-jose-jwt/maxkey-jose-jwt">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/maxkey-dao/maxkey-dao"> <dependent-module deploy-path="../" handle="module:/resource/maxkey-dao/maxkey-dao">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/maxkey-client-sdk/maxkey-client-sdk"> <dependent-module deploy-path="../" handle="module:/resource/maxkey-client-sdk/maxkey-client-sdk">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/maxkey-protocol-oauth-2.0/maxkey-protocol-oauth-2.0"> <dependent-module deploy-path="../" handle="module:/resource/maxkey-protocol-oauth-2.0/maxkey-protocol-oauth-2.0">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/maxkey-protocol-saml-2.0/maxkey-protocol-saml-2.0"> <dependent-module deploy-path="../" handle="module:/resource/maxkey-protocol-saml-2.0/maxkey-protocol-saml-2.0">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
</wb-module> </wb-module>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<faceted-project> <faceted-project>
<fixed facet="jst.java"/> <fixed facet="jst.java"/>
<fixed facet="jst.web"/> <installed facet="jst.utility" version="1.0"/>
<installed facet="jst.web" version="2.4"/>
<installed facet="jst.java" version="1.8"/> <installed facet="jst.java" version="1.8"/>
</faceted-project> </faceted-project>

View File

@ -1,6 +1,6 @@
description = "maxkey-web-manage" description = "maxkey-web-manage"
apply plugin: 'war' //apply plugin: 'war'
apply plugin: 'eclipse-wtp' apply plugin: 'eclipse-wtp'
dependencies { dependencies {

View File

@ -3,7 +3,7 @@ description = "maxkey-web-maxkey"
// Apply the java plugin to add support for Java // Apply the java plugin to add support for Java
apply plugin: 'java' apply plugin: 'java'
apply plugin: 'war' //apply plugin: 'war'
apply plugin: 'eclipse-wtp' apply plugin: 'eclipse-wtp'
apply plugin: 'com.bmuschko.tomcat-base' apply plugin: 'com.bmuschko.tomcat-base'
apply plugin: 'com.bmuschko.tomcat' apply plugin: 'com.bmuschko.tomcat'

View File

@ -1,4 +1,4 @@
echo off echo off
echo set env echo set env
set JAVA_HOME=D:\javaIDE\jdk1.8.0_31 set JAVA_HOME=D:\JavaIDE\jdk1.8.0_91
set GRADLE_HOME=D:\javaIDE\gradle-4.8 set GRADLE_HOME=D:\JavaIDE\gradle-5.4.1