From d421ac07cab2c3b2214f67f98b567f7024447899 Mon Sep 17 00:00:00 2001 From: shimingxy Date: Sun, 20 Oct 2019 23:21:30 +0800 Subject: [PATCH] fix --- .../java/org/maxkey/domain/Navigations.java | 2 +- .../org/maxkey/domain/apps/Applications.java | 9 +- .../maxkey/domain/apps/OAuth20Details.java | 2 +- .../crypto/SCryptPasswordEncoderTest.java | 13 +- maxkey-lib/other/mybatis-jpa-extra-1.0.jar | Bin 66217 -> 99238 bytes .../maxkey-protocol-cas/bin/main/.gitignore | 2 - .../maxkey-protocol-cas/bin/test/.gitignore | 1 - .../bin/main/.gitignore | 2 - .../bin/main/.gitignore | 2 - .../bin/main/.gitignore | 2 - .../maxkey-protocol-ltpa/bin/main/.gitignore | 2 - .../bin/main/.gitignore | 2 - .../oauth2/spring-security-oauth2-1.0.xsd | 728 ++++++++++++++++++ .../bin/main/.gitignore | 2 - .../bin/main/.gitignore | 2 - .../org.eclipse.core.resources.prefs | 4 +- .../maxkey/tasks/report/LoginDayReport.java | 81 -- .../main/resources/spring/maxkey-mgt-task.xml | 10 +- .../views/groupapp/addGroupAppsList.ftl | 3 +- sql/secdb-20160918.sql | 4 +- 20 files changed, 753 insertions(+), 120 deletions(-) delete mode 100644 maxkey-protocols/maxkey-protocol-cas/bin/main/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-cas/bin/test/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-desktop/bin/main/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-extendapi/bin/main/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-formbased/bin/main/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/.gitignore create mode 100644 maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd delete mode 100644 maxkey-protocols/maxkey-protocol-saml-2.0/bin/main/.gitignore delete mode 100644 maxkey-protocols/maxkey-protocol-tokenbased/bin/main/.gitignore delete mode 100644 maxkey-web-manage/src/main/java/org/maxkey/tasks/report/LoginDayReport.java diff --git a/maxkey-core/src/main/java/org/maxkey/domain/Navigations.java b/maxkey-core/src/main/java/org/maxkey/domain/Navigations.java index b777ada1..3a9ea343 100644 --- a/maxkey-core/src/main/java/org/maxkey/domain/Navigations.java +++ b/maxkey-core/src/main/java/org/maxkey/domain/Navigations.java @@ -149,7 +149,7 @@ public class Navigations extends JpaBaseDomain implements java.io.Serializable return "Navigations [name=" + name + ", url=" + url + ", type=" + type + ", target=" + target + ", pId=" + pId + ", pName=" + pName + ", xPath=" + xPath + ", hasChild=" + hasChild - + ", sortOrder=" + sortOrder + ", visible=" + visible + +", visible=" + visible + ", childNavs=" + childNavs + "]"; } diff --git a/maxkey-core/src/main/java/org/maxkey/domain/apps/Applications.java b/maxkey-core/src/main/java/org/maxkey/domain/apps/Applications.java index d2a307df..70f0df3d 100644 --- a/maxkey-core/src/main/java/org/maxkey/domain/apps/Applications.java +++ b/maxkey-core/src/main/java/org/maxkey/domain/apps/Applications.java @@ -106,7 +106,7 @@ public class Applications extends JpaBaseDomain implements Serializable{ protected Accounts appUser; - protected int sortOrder; + protected int sortIndex; protected String description; @@ -242,8 +242,13 @@ public class Applications extends JpaBaseDomain implements Serializable{ } + public int getSortIndex() { + return sortIndex; + } - + public void setSortIndex(int sortIndex) { + this.sortIndex = sortIndex; + } /** * @param icon the icon to set diff --git a/maxkey-core/src/main/java/org/maxkey/domain/apps/OAuth20Details.java b/maxkey-core/src/main/java/org/maxkey/domain/apps/OAuth20Details.java index 1e99735b..e842f4f6 100644 --- a/maxkey-core/src/main/java/org/maxkey/domain/apps/OAuth20Details.java +++ b/maxkey-core/src/main/java/org/maxkey/domain/apps/OAuth20Details.java @@ -64,7 +64,7 @@ public class OAuth20Details extends Applications { this.setIcon(application.getIcon()); this.clientId=application.getId(); - this.setSortOrder(application.getSortOrder()); + this.setSortIndex(application.getSortIndex()); this.setVendor(application.getVendor()); this.setVendorUrl(application.getVendorUrl()); diff --git a/maxkey-core/src/test/java/com/connsec/crypto/SCryptPasswordEncoderTest.java b/maxkey-core/src/test/java/com/connsec/crypto/SCryptPasswordEncoderTest.java index 33bef3a1..fe554ffb 100644 --- a/maxkey-core/src/test/java/com/connsec/crypto/SCryptPasswordEncoderTest.java +++ b/maxkey-core/src/test/java/com/connsec/crypto/SCryptPasswordEncoderTest.java @@ -1,6 +1,6 @@ package com.connsec.crypto; -import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; public class SCryptPasswordEncoderTest { @@ -10,11 +10,12 @@ public class SCryptPasswordEncoderTest { public static void main(String[] args) { // TODO Auto-generated method stub - SCryptPasswordEncoder pe=new SCryptPasswordEncoder(); - String c="$e0801$7Holo9EgzBeg5xf/WLZu3/5IQwOyEPDLJPgMXkF9jnekBrbQUMt4CF9O2trkz3zBCnCLpUMR437q/AjQ5TTToA==$oYB8KRSxAsxkKkt5r79W6r6P0wTUcKwGye1ivXRN0Ts=" - ; - System.out.println(pe.encode("shimingxy")+"_password"); - System.out.println(pe.matches("shimingxy"+"_password", c)); + BCryptPasswordEncoder pe=new BCryptPasswordEncoder(); + //String c="$e0801$7Holo9EgzBeg5xf/WLZu3/5IQwOyEPDLJPgMXkF9jnekBrbQUMt4CF9O2trkz3zBCnCLpUMR437q/AjQ5TTToA==$oYB8KRSxAsxkKkt5r79W6r6P0wTUcKwGye1ivXRN0Ts=" + //; + System.out.println(pe.encode("admin")); + // System.out.println(pe.encode("shimingxy")+"_password"); + //System.out.println(pe.matches("shimingxy"+"_password", c)); } } diff --git a/maxkey-lib/other/mybatis-jpa-extra-1.0.jar b/maxkey-lib/other/mybatis-jpa-extra-1.0.jar index 07da7209bf45286cdd0507af8c1697e6c5032f45..28e5d03523984249471888a80c335d4120503c18 100644 GIT binary patch delta 48879 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 F{{y`>5BvZC delta 16049 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 Ar2qf` diff --git a/maxkey-protocols/maxkey-protocol-cas/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-cas/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-cas/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-cas/bin/test/.gitignore b/maxkey-protocols/maxkey-protocol-cas/bin/test/.gitignore deleted file mode 100644 index c2d9872a..00000000 --- a/maxkey-protocols/maxkey-protocol-cas/bin/test/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/com/ diff --git a/maxkey-protocols/maxkey-protocol-desktop/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-desktop/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-desktop/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-extendapi/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-extendapi/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-extendapi/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-formbased/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-formbased/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-formbased/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd b/maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd new file mode 100644 index 00000000..71007dd0 --- /dev/null +++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/bin/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd @@ -0,0 +1,728 @@ + + + + + + + + + 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. + + + + + + + + + + + + + + + The OAuth2ProtectedResourceDetails governing the configuration of this client. Mandatory. + + + + + + + The reference to the bean that manages access token acquisition. Optional (defaults to a chain + including common grant types from the spec). + + + + + + + + + + + + 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). + + + + + + + + + The configuration of the authorization code + mechanism. This + mechanism enables a way for clients to + obtain an + access token by obtaining an authorization code. + + + + + + + Whether to disable the authorization code + mechanism. + + + + + + + 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". + + + + + + + + + The configuration of the client credentials + grant type. + + + + + + + Whether to disable the implicit grant type + + + + + + + + + The configuration of the refresh token grant + type. + + + + + + + Whether to disable the refresh token grant + type + + + + + + + + + The configuration of the client credentials + grant type. + + + + + + + Whether to disable the refresh token grant + type + + + + + + + + + The configuration of the resource owner password + grant type. + + + + + + + Whether to disable the refresh token grant + type + + + + + + + A reference to an authentication manager that + can be used to + authenticate the resource owner + + + + + + + + + The configuration of your custom grant type. + + + + + + + Whether to disable this grant + type + + + + + + + A reference to your token granter + + + + + + + + + + The reference to the bean that defines the client + details service. + + + + + + + The URL at which a request for an access token + will be serviced. + Default value: "/oauth/token" + + + + + + + The URL at which a user is redirected for + authorization. Default + value: "/oauth/authorize" + + + + + + + + + The reference to the bean that defines the + granter of different oauth + token types. + + + + + + + + The reference to the bean that defines the + implicit grant service. + + + + + + + + The reference to the bean that defines the token + services. Default + value is an instance of + "org.springframework.security.oauth2.provider.token.DefaultTokenServices". + + + + + + + + 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". + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + The URL of the page that handles errors (default forward:/oauth/error). + + + + + + + + The name of the form parameter that is used to + indicate user + approval of the client + authentication + request. + Default value: "user_oauth_approval". + + + + + + + + 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". + + + + + + + + + + + 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" + + + + + + + + + + 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. + + + + + + + + The reference to the bean that defines the token + services. Default + value is an instance of + "org.springframework.security.oauth2.provider.token.DefaultTokenServices". + + + + + + + + The reference to the bean that defines the entry point for failed authentications. Defaults to + a vanilla + org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint. + + + + + + + + The reference to the bean that defines the AuthenticationDetailsSource. + + + + + + + + + + + + Default element that contains the definition of the + OAuth clients that are + allowed to access this + service. + + + + + + + + + + + Definition of a client that can act on behalf + of a user. + + + + + + + + The client id. + + + + + + + The client secret. If the secret is + undefined or empty (the + default) the client does + not + require a + secret. + + + + + + + The re-direct URI(s) established during + registration (optional, comma separated). + + + + + + + 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). + + + + + + + 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. + + + + + + + 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". + + + + + + + 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. + + + + + + + The access token validity period in seconds (optional). If unspecified a global default will + be applied by the token services. + + + + + + + The refresh token validity period in seconds (optional). If unspecified a global default + will + be applied by the token services. + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + 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 + + + + + + + + + + + + + Creates the oauth 2 client filter be be added to the + application security policy. + + + + + + + + + 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". + + + + + + + + + + + + Definition of a remote resource that is protected via + OAuth2 to which this client application wants + access. + + + + + + + + + The grant type. Currently defined grant types + include + "authorization_code", "password", and + "assertion". + Default value + is "authorization_code". + + + + + + + The client id. This is the id by which the + resource server will + identify this application. + + + + + + + The uri to where the access token may be + obtained. + + + + + + + Comma-separted list of string specifying the + scope of the access to the + resource. By default, + no + scope will be + specified. + + + + + + + The secret asssociated with the resource. By + default, no secret + will be supplied for access to + the resource. + + + + + + + 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. + + + + + + + The uri to which the user will be redirected if + the user is ever + needed to grant an authorization + code. + + + + + + + The method for bearing the token when accessing + the resource. + Default value is "header". See + AuthenticationScheme enum for possible values. + + + + + + + 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. + + + + + + + Some resource servers may require a + pre-established URI to which + they will redirect users after + users + authorize an access token. + + + + + + + Boolean flag indicating that the current URI should be used as a redirect (if available) rather + than the + registered redirect URI. Default is true. + + + + + + + The username for authentication, required only when type is "password". + + + + + + + The password for authentication, required only when type is "password". + + + + + + + + + diff --git a/maxkey-protocols/maxkey-protocol-saml-2.0/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-saml-2.0/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-saml-2.0/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-protocols/maxkey-protocol-tokenbased/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-tokenbased/bin/main/.gitignore deleted file mode 100644 index 59d60644..00000000 --- a/maxkey-protocols/maxkey-protocol-tokenbased/bin/main/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/META-INF/ -/org/ diff --git a/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs b/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs index 187d582c..896a9a53 100644 --- a/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs +++ b/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,2 @@ eclipse.preferences.version=1 -encoding//src/main/resources/templates/views/apps/appAddCommon.ftl=UTF-8 -encoding//src/main/resources/templates/views/apps/appUpdateCommon.ftl=UTF-8 -encoding/=UTF-8 +encoding/=UTF-8 \ No newline at end of file diff --git a/maxkey-web-manage/src/main/java/org/maxkey/tasks/report/LoginDayReport.java b/maxkey-web-manage/src/main/java/org/maxkey/tasks/report/LoginDayReport.java deleted file mode 100644 index c2564d97..00000000 --- a/maxkey-web-manage/src/main/java/org/maxkey/tasks/report/LoginDayReport.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.maxkey.tasks.report; - -import java.sql.Types; -import java.util.List; -import java.util.Map; - - -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.jdbc.core.JdbcTemplate; - -public class LoginDayReport { - - final static Logger _logger = LoggerFactory.getLogger(LoginDayReport.class); - - JdbcTemplate jdbcTemplate; - - public static final String DAY_REPORT_COUNT_SELECT_SQL="SELECT COUNT(ID) DAYCOUNT FROM SECDB.LOGIN_HISTORY WHERE LOGINTIME > ? AND LOGINTIME < ?"; - - public static final String DAY_REPORT_INSERT_SQL="INSERT INTO REPORT_LOGIN_DAY (REPORTDATE,REPORTYEAR,REPORTMONTH,REPORTDAY,REPORTCOUNT) VALUES (? , ? , ? , ? , ?)"; - - public static final String MONTH_REPORT_COUNT_SELECT_SQL="SELECT REPORTCOUNT FROM REPORT_LOGIN_MONTH WHERE REPORTYEAR = ? AND REPORTMONTH = ?"; - - public static final String MONTH_REPORT_INSERT_SQL="INSERT INTO REPORT_LOGIN_MONTH (REPORTDATE,REPORTYEAR,REPORTMONTH,REPORTCOUNT) VALUES (? , ? , ? , ?)"; - - public static final String MONTH_REPORT_UPDATE_SQL="UPDATE REPORT_LOGIN_MONTH SET REPORTCOUNT = ? WHERE REPORTYEAR = ? AND REPORTMONTH = ?"; - - public void dayReportCount() { - _logger.info("Day Report Statistical Analysis start . "); - DateTime currentdateTime = new DateTime(); - _logger.info("current date time : " +currentdateTime.toString( DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"))); - - String beginDateTime=currentdateTime.toString( DateTimeFormat.forPattern("yyyy-MM-dd 00:00:00")); - String endDateTime=currentdateTime.toString( DateTimeFormat.forPattern("yyyy-MM-dd 23:59:59")); - String currentDate=currentdateTime.toString( DateTimeFormat.forPattern("yyyy-MM-dd")); - String currentYear=currentdateTime.toString( DateTimeFormat.forPattern("yyyy")); - String currentMonth=currentdateTime.toString( DateTimeFormat.forPattern("MM")); - String currentDay=currentdateTime.toString( DateTimeFormat.forPattern("dd")); - - _logger.info("Day Report Statistical Analysis Date : " +currentDate); - //Analysis Current Day Login Count - Integer reportCount=jdbcTemplate.queryForObject(DAY_REPORT_COUNT_SELECT_SQL, - new Object[] { beginDateTime,endDateTime}, - new int[] {Types.TIMESTAMP,Types.TIMESTAMP}, Integer.class); - - _logger.info("Current day Count " + reportCount); - - jdbcTemplate.update(DAY_REPORT_INSERT_SQL, currentDate,currentYear,currentMonth,currentDay,reportCount); - - /** - * if month count not exist,then insert a record - * else add current day count to month count - */ - List> listSelectMonthReport=jdbcTemplate.queryForList(MONTH_REPORT_COUNT_SELECT_SQL, - new Object[] { currentYear,currentMonth}, - new int[] {Types.INTEGER,Types.INTEGER}); - - if(listSelectMonthReport.size()<1){ - jdbcTemplate.update(MONTH_REPORT_INSERT_SQL, currentDate,currentYear,currentMonth,reportCount); - _logger.info("Current Month Count " + reportCount); - }else{ - Integer selectMonthReportCount=Integer.parseInt(listSelectMonthReport.get(0).get("REPORTCOUNT").toString())+reportCount; - jdbcTemplate.update(MONTH_REPORT_UPDATE_SQL,selectMonthReportCount, currentYear,currentMonth); - _logger.info("Current Month Count " + selectMonthReportCount); - } - - _logger.info("Day Report Statistical Analysis Successful"); - } - - - public JdbcTemplate getJdbcTemplate() { - return jdbcTemplate; - } - - public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - -} diff --git a/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-task.xml b/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-task.xml index afb85e5c..00fda6dc 100644 --- a/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-task.xml +++ b/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-task.xml @@ -19,7 +19,7 @@ http://www.springframework.org/schema/security/spring-security.xsd"> - + @@ -41,12 +39,12 @@ - + - + --> diff --git a/maxkey-web-manage/src/main/resources/templates/views/groupapp/addGroupAppsList.ftl b/maxkey-web-manage/src/main/resources/templates/views/groupapp/addGroupAppsList.ftl index 3e0ac284..8b340dd7 100644 --- a/maxkey-web-manage/src/main/resources/templates/views/groupapp/addGroupAppsList.ftl +++ b/maxkey-web-manage/src/main/resources/templates/views/groupapp/addGroupAppsList.ftl @@ -47,7 +47,7 @@
- +
<@locale code="app.name"/>:<@locale code="apps.name"/>:
@@ -104,6 +104,7 @@ data-total-field="records" data-page-list="[10, 25, 50, 100]" data-search="false" + data-sort-name="name" data-locale="zh-CN" data-query-params="dataGridQueryParams" data-query-params-type="pageSize" diff --git a/sql/secdb-20160918.sql b/sql/secdb-20160918.sql index 2fda8bb5..513b6477 100644 --- a/sql/secdb-20160918.sql +++ b/sql/secdb-20160918.sql @@ -1,5 +1,5 @@ -CREATE DATABASE IF NOT EXISTS `secdb` /*!40100 DEFAULT CHARACTER SET latin1 */; -USE `secdb`; +CREATE DATABASE IF NOT EXISTS `maxkey` /*!40100 DEFAULT CHARACTER SET utf8 */; +USE `maxkey`; -- MySQL dump 10.13 Distrib 5.6.23, for Win64 (x86_64) -- -- Host: 127.0.0.1 Database: secdb