Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yujianwangzivayy
MaxKey
提交
67478a71
MaxKey
项目概览
yujianwangzivayy
/
MaxKey
与 Fork 源项目一致
Fork自
MaxKey单点登录官方(MaxKeyTop) / MaxKey
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MaxKey
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
67478a71
编写于
12月 16, 2019
作者:
MaxKey单点登录官方
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Configuration
上级
eadf6098
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
235 addition
and
408 deletion
+235
-408
maxkey-core/src/main/java/org/maxkey/config/ApplicationConfig.java
...re/src/main/java/org/maxkey/config/ApplicationConfig.java
+37
-12
maxkey-core/src/main/java/org/maxkey/config/CharacterEncodingConfig.java
.../main/java/org/maxkey/config/CharacterEncodingConfig.java
+9
-0
maxkey-core/src/main/java/org/maxkey/config/DataSoruceConfig.java
...ore/src/main/java/org/maxkey/config/DataSoruceConfig.java
+14
-2
maxkey-core/src/main/java/org/maxkey/config/EmailConfig.java
maxkey-core/src/main/java/org/maxkey/config/EmailConfig.java
+11
-5
maxkey-core/src/main/java/org/maxkey/config/LoginConfig.java
maxkey-core/src/main/java/org/maxkey/config/LoginConfig.java
+13
-8
maxkey-web-manage/src/main/java/org/maxkey/T.java
maxkey-web-manage/src/main/java/org/maxkey/T.java
+0
-10
maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/CaptchaEndpoint.java
...rc/main/java/org/maxkey/web/endpoint/CaptchaEndpoint.java
+0
-69
maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/ImageEndpoint.java
.../src/main/java/org/maxkey/web/endpoint/ImageEndpoint.java
+84
-10
maxkey-web-manage/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java
...in/java/org/maxkey/web/interceptor/PermissionAdapter.java
+5
-46
maxkey-web-manage/src/main/resources/config/applicationConfig.properties
...ge/src/main/resources/config/applicationConfig.properties
+6
-6
maxkey-web-manage/src/main/resources/spring/maxkey-mgt.xml
maxkey-web-manage/src/main/resources/spring/maxkey-mgt.xml
+1
-55
maxkey-web-maxkey/src/main/java/org/maxkey/web/filter/IpAddressFilter.java
.../src/main/java/org/maxkey/web/filter/IpAddressFilter.java
+5
-3
maxkey-web-maxkey/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java
...in/java/org/maxkey/web/interceptor/PermissionAdapter.java
+23
-65
maxkey-web-maxkey/src/main/resources/config/applicationConfig.properties
...ey/src/main/resources/config/applicationConfig.properties
+15
-8
maxkey-web-maxkey/src/main/resources/config/applicationLogin.properties
...key/src/main/resources/config/applicationLogin.properties
+6
-26
maxkey-web-maxkey/src/main/resources/spring/maxkey-persistence.xml
...b-maxkey/src/main/resources/spring/maxkey-persistence.xml
+1
-1
maxkey-web-maxkey/src/main/resources/spring/maxkey-security.xml
...-web-maxkey/src/main/resources/spring/maxkey-security.xml
+3
-25
maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml
maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml
+1
-1
maxkey-web-maxkey/src/main/resources/spring/maxkey.xml
maxkey-web-maxkey/src/main/resources/spring/maxkey.xml
+1
-56
未找到文件。
maxkey-core/src/main/java/org/maxkey/config/ApplicationConfig.java
浏览文件 @
67478a71
package
org.maxkey.config
;
import
java.util.ArrayList
;
import
java.util.concurrent.ConcurrentHashMap
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.PropertySource
;
import
org.springframework.stereotype.Component
;
/**
* 全局应用程序配置
...
...
@@ -21,38 +22,52 @@ import org.slf4j.LoggerFactory;
* @author Crystal.Sea
*
*/
@Component
@PropertySource
(
"classpath:/config/applicationConfig.properties"
)
public
class
ApplicationConfig
{
private
static
final
Logger
_logger
=
LoggerFactory
.
getLogger
(
ApplicationConfig
.
class
);
@Autowired
DataSoruceConfig
dataSoruceConfig
;
@Autowired
EmailConfig
emailConfig
;
@Autowired
CharacterEncodingConfig
characterEncodingConfig
;
@Autowired
LoginConfig
loginConfig
;
@Value
(
"${config.server.domain}"
)
String
domainName
;
@Value
(
"${config.server.subdomain}"
)
String
subDomainName
;
@Value
(
"${config.server.name}"
)
String
serverName
;
@Value
(
"${config.server.prefix.uri}"
)
String
serverPrefix
;
@Value
(
"${config.server.default.uri}"
)
String
defaultUri
;
@Value
(
"${config.server.manage.uri}"
)
String
manageUri
;
/*
//is enable whiteList for ipAddress filter
boolean whiteList;
//All user have permission Access URL
public ConcurrentHashMap<String,String> anonymousAccessUrls;
*/
String
manageUri
;
public
ApplicationConfig
()
{
super
();
anonymousAccessUrls
=
new
ConcurrentHashMap
<
String
,
String
>();
/*
anonymousAccessUrls=new ConcurrentHashMap<String,String>();
anonymousAccessUrls.put("/index/", "/index/");
anonymousAccessUrls.put("/index/top","/index/top/");
anonymousAccessUrls.put("/index/left/","/index/left/");
...
...
@@ -68,6 +83,7 @@ public class ApplicationConfig {
anonymousAccessUrls.put("/approles/appRolesGrid/","/approles/appRolesGrid/");
_logger.debug("Anonymous Access Urls : \n"+anonymousAccessUrls);
*/
}
...
...
@@ -147,7 +163,7 @@ public class ApplicationConfig {
public
void
setSubDomainName
(
String
subDomainName
)
{
this
.
subDomainName
=
subDomainName
;
}
/*
public ConcurrentHashMap<String, String> getAnonymousAccessUrls() {
return anonymousAccessUrls;
}
...
...
@@ -158,7 +174,7 @@ public class ApplicationConfig {
this.anonymousAccessUrls.put(anonymousAccessUrl,anonymousAccessUrl);
}
}
*/
/**
* @return the emailConfig
*/
...
...
@@ -182,12 +198,21 @@ public class ApplicationConfig {
this
.
manageUri
=
manageUri
;
}
public
String
getDefaultUri
()
{
return
defaultUri
;
}
public
void
setDefaultUri
(
String
defaultUri
)
{
this
.
defaultUri
=
defaultUri
;
}
/*
public boolean isWhiteList() {
return whiteList;
}
public void setWhiteList(boolean whiteList) {
this.whiteList = whiteList;
}
}
*/
}
maxkey-core/src/main/java/org/maxkey/config/CharacterEncodingConfig.java
浏览文件 @
67478a71
...
...
@@ -5,26 +5,35 @@ package org.maxkey.config;
import
java.io.UnsupportedEncodingException
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
/**
* 字符集转换及转换配置
* @author Crystal.Sea
*
*/
@Configuration
@PropertySource
(
"classpath:/config/applicationConfig.properties"
)
public
class
CharacterEncodingConfig
{
/**
* 源字符集
*/
@Value
(
"${config.characterencoding.charset.from}"
)
String
fromCharSet
;
/**
* 目标字符集
*/
@Value
(
"${config.characterencoding.charset.to}"
)
String
toCharSet
;
/**
* 转换标志
*/
@Value
(
"${config.characterencoding.encoding}"
)
boolean
encoding
=
false
;
...
...
maxkey-core/src/main/java/org/maxkey/config/DataSoruceConfig.java
浏览文件 @
67478a71
...
...
@@ -2,8 +2,10 @@ package org.maxkey.config;
import
org.apache.commons.logging.LogFactory
;
import
org.apache.mybatis.jpa.dialect.Dialect
;
import
org.maxkey.crypto.Base64Utils
;
import
org.maxkey.crypto.password.PasswordReciprocal
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
/**
* 数据源配置
...
...
@@ -20,32 +22,40 @@ import org.maxkey.crypto.password.PasswordReciprocal;
* @author Crystal.Sea
*
*/
@Configuration
@PropertySource
(
"classpath:/config/applicationConfig.properties"
)
public
class
DataSoruceConfig
{
/**
* 数据库类型
*/
@Value
(
"${config.datasource.database:mysql}"
)
String
database
;
/**
* jdbc驱动类
*/
@Value
(
"${config.datasource.driverclass:com.mysql.jdbc.Driver}"
)
String
driverClass
;
/**
* jdbc连接地址
*/
@Value
(
"${config.datasource.url:jdbc:mysql://localhost/maxkey?autoReconnect=true&characterEncoding=UTF-8}"
)
String
url
;
/**
* 数据库用户名
*/
@Value
(
"${config.datasource.username:root}"
)
String
username
;
/**
* 数据库密码
*/
@Value
(
"${config.datasource.password:maxkey}"
)
String
password
;
/**
* 数据库密码是否加密
*/
@Value
(
"${config.datasource.password.encrypt}"
)
boolean
encrypt
=
false
;
/**
...
...
@@ -107,7 +117,6 @@ public class DataSoruceConfig {
* @param database the database to set
*/
public
void
setDatabase
(
String
database
)
{
this
.
dialect
=
Dialect
.
getDialectMap
().
get
(
database
);
this
.
database
=
database
;
}
...
...
@@ -143,6 +152,9 @@ public class DataSoruceConfig {
* @return the dialect
*/
public
String
getDialect
()
{
if
(
this
.
dialect
==
null
)
{
this
.
dialect
=
Dialect
.
getDialectMap
().
get
(
database
);
}
return
dialect
;
}
...
...
maxkey-core/src/main/java/org/maxkey/config/EmailConfig.java
浏览文件 @
67478a71
package
org.maxkey.config
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
@Configuration
@PropertySource
(
"classpath:/config/applicationConfig.properties"
)
public
class
EmailConfig
{
@Value
(
"${config.email.username}"
)
private
String
username
;
@Value
(
"${config.email.password}"
)
private
String
password
;
@Value
(
"${config.email.smtpHost}"
)
private
String
smtpHost
;
@Value
(
"${config.email.senderMail}"
)
private
String
senderMail
;
@Value
(
"${config.email.port}"
)
private
Integer
port
;
@Value
(
"${config.email.ssl}"
)
private
boolean
ssl
;
...
...
maxkey-core/src/main/java/org/maxkey/config/LoginConfig.java
浏览文件 @
67478a71
package
org.maxkey.config
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
@Configuration
@PropertySource
(
"classpath:/config/applicationLogin.properties"
)
public
class
LoginConfig
{
@Value
(
"${config.login.captcha}"
)
boolean
captcha
;
@Value
(
"${config.login.onetimepwd}"
)
boolean
oneTimePwd
;
@Value
(
"${config.login.socialsignon}"
)
boolean
socialSignOn
;
@Value
(
"${config.login.kerberos}"
)
boolean
kerberos
;
@Value
(
"${config.login.remeberme}"
)
boolean
remeberMe
;
@Value
(
"${config.login.wsfederation}"
)
boolean
wsFederation
;
@Value
(
"${config.login.default.uri}"
)
String
defaultUri
;
...
...
maxkey-web-manage/src/main/java/org/maxkey/T.java
已删除
100644 → 0
浏览文件 @
eadf6098
package
org.maxkey
;
import
org.springframework.boot.web.servlet.support.SpringBootServletInitializer
;
public
class
T
extends
SpringBootServletInitializer
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"MaxKeyMgtApplication"
);
}
}
maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/CaptchaEndpoint.java
已删除
100644 → 0
浏览文件 @
eadf6098
package
org.maxkey.web.endpoint
;
import
java.awt.image.BufferedImage
;
import
javax.imageio.ImageIO
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.maxkey.web.WebConstants
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.servlet.ModelAndView
;
import
com.google.code.kaptcha.Producer
;
/**
* @author Crystal.Sea
*
*/
@Controller
@RequestMapping
(
value
=
"/captcha"
)
public
class
CaptchaEndpoint
{
private
static
final
Logger
_logger
=
LoggerFactory
.
getLogger
(
CaptchaEndpoint
.
class
);
@Autowired
private
Producer
captchaProducer
;
/**
* captcha image Producer
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping
public
ModelAndView
captchaHandleRequest
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
// Set to expire far in the past.
response
.
setDateHeader
(
"Expires"
,
0
);
// Set standard HTTP/1.1 no-cache headers.
response
.
setHeader
(
"Cache-Control"
,
"no-store, no-cache, must-revalidate"
);
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response
.
addHeader
(
"Cache-Control"
,
"post-check=0, pre-check=0"
);
// Set standard HTTP/1.0 no-cache header.
response
.
setHeader
(
"Pragma"
,
"no-cache"
);
// return a jpeg
response
.
setContentType
(
"image/jpeg"
);
// create the text for the image
String
capText
=
captchaProducer
.
createText
();
_logger
.
debug
(
"Captcha Text : "
+
capText
);
// store the text in the session
request
.
getSession
().
setAttribute
(
WebConstants
.
KAPTCHA_SESSION_KEY
,
capText
);
// create the image with the text
BufferedImage
bi
=
captchaProducer
.
createImage
(
capText
);
ServletOutputStream
out
=
response
.
getOutputStream
();
// write the data out
ImageIO
.
write
(
bi
,
"jpg"
,
out
);
try
{
out
.
flush
();
}
finally
{
out
.
close
();
}
return
null
;
}
}
maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/ImageEndpoint.java
浏览文件 @
67478a71
...
...
@@ -2,6 +2,8 @@ package org.maxkey.web.endpoint;
import
java.awt.image.BufferedImage
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
javax.imageio.ImageIO
;
...
...
@@ -9,30 +11,73 @@ import javax.servlet.ServletOutputStream;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.maxkey.web.WebConstants
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.servlet.ModelAndView
;
import
com.google.code.kaptcha.Producer
;
/**
* @author Crystal.Sea
*
*/
@Controller
@RequestMapping
(
value
=
"/image"
)
public
class
ImageEndpoint
{
private
static
final
Logger
_logger
=
LoggerFactory
.
getLogger
(
ImageEndpoint
.
class
);
@Autowired
private
Producer
captchaProducer
;
/**
* captcha image Producer
* @param request
* @param response
*/
@RequestMapping
(
value
=
"/captcha"
)
public
void
captchaHandleRequest
(
HttpServletRequest
request
,
HttpServletResponse
response
){
try
{
// Set to expire far in the past.
response
.
setDateHeader
(
"Expires"
,
0
);
// Set standard HTTP/1.1 no-cache headers.
response
.
setHeader
(
"Cache-Control"
,
"no-store, no-cache, must-revalidate"
);
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response
.
addHeader
(
"Cache-Control"
,
"post-check=0, pre-check=0"
);
// Set standard HTTP/1.0 no-cache header.
response
.
setHeader
(
"Pragma"
,
"no-cache"
);
// return a jpeg
response
.
setContentType
(
"image/jpeg"
);
// create the text for the image
String
capText
=
captchaProducer
.
createText
();
_logger
.
debug
(
"Sesssion id "
+
request
.
getSession
().
getId
()
+
" , Captcha Text is "
+
capText
);
// store the text in the session
request
.
getSession
().
setAttribute
(
WebConstants
.
KAPTCHA_SESSION_KEY
,
capText
);
// create the image with the text
BufferedImage
bi
=
captchaProducer
.
createImage
(
capText
);
ServletOutputStream
out
=
response
.
getOutputStream
();
// write the data out
ImageIO
.
write
(
bi
,
"jpg"
,
out
);
out
.
flush
();
out
.
close
();
}
catch
(
Exception
e
)
{
_logger
.
error
(
"captcha Producer Error "
+
e
.
getMessage
());
}
}
/**
* image Producer
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping
(
"/{id}"
)
public
ModelAndView
imageHandleRequest
(
HttpServletRequest
request
,
HttpServletResponse
response
,
@PathVariable
(
"id"
)
String
id
)
throws
Exception
{
@RequestMapping
(
"/
image/
{id}"
)
public
void
imageHandleRequest
(
HttpServletRequest
request
,
HttpServletResponse
response
,
@PathVariable
(
"id"
)
String
id
)
throws
Exception
{
// Set to expire far in the past.
response
.
setDateHeader
(
"Expires"
,
0
);
// Set standard HTTP/1.1 no-cache headers.
...
...
@@ -45,20 +90,49 @@ public class ImageEndpoint {
response
.
setContentType
(
"image/gif"
);
// create the text for the image
byte
[]
image
=(
byte
[])
request
.
getSession
().
getAttribute
(
id
);
request
.
getSession
().
removeAttribute
(
id
);
//
request.getSession().removeAttribute(id);
// create the image with the text
if
(
image
!=
null
){
InputStream
in
=
new
ByteArrayInputStream
(
image
);
BufferedImage
bi
=
ImageIO
.
read
(
in
);
ServletOutputStream
out
=
response
.
getOutputStream
();
// write the data out
ImageIO
.
write
(
b
i
,
"gif"
,
out
);
ImageIO
.
write
(
b
yte2BufferedImage
(
image
)
,
"gif"
,
out
);
try
{
out
.
flush
();
}
finally
{
out
.
close
();
}
}
return
null
;
}
public
static
BufferedImage
byte2BufferedImage
(
byte
[]
imageByte
){
try
{
InputStream
in
=
new
ByteArrayInputStream
(
imageByte
);
BufferedImage
bufferedImage
=
ImageIO
.
read
(
in
);
return
bufferedImage
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
byte
[]
bufferedImage2Byte
(
BufferedImage
bufferedImage
){
try
{
ByteArrayOutputStream
byteArrayOutputStream
=
new
ByteArrayOutputStream
();
ImageIO
.
write
(
bufferedImage
,
"gif"
,
byteArrayOutputStream
);
return
byteArrayOutputStream
.
toByteArray
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
Producer
getCaptchaProducer
()
{
return
captchaProducer
;
}
public
void
setCaptchaProducer
(
Producer
captchaProducer
)
{
this
.
captchaProducer
=
captchaProducer
;
}
}
maxkey-web-manage/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java
浏览文件 @
67478a71
package
org.maxkey.web.interceptor
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
javax.servlet.RequestDispatcher
;
...
...
@@ -8,8 +7,6 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
import
org.maxkey.config.ApplicationConfig
;
import
org.maxkey.domain.Navigations
;
import
org.maxkey.domain.UserInfo
;
import
org.maxkey.web.WebContext
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -40,55 +37,17 @@ public class PermissionAdapter extends HandlerInterceptorAdapter {
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
_logger
.
debug
(
"PermissionAdapter preHandle"
);
//加载定义的功能菜单地址
/*if(navigationsMap==null){
List<Navigations> navigationsList=((NavigationsService)WebContext.getBean("navigationsService")).query(null);
navigationsMap=new ConcurrentHashMap<String ,String >();
for(Navigations nav : navigationsList){
if(nav.getUrl()==null)continue;
if(nav.getUrl().endsWith("/")){
navigationsMap.put("/"+nav.getUrl(), nav.getId());
}else{
navigationsMap.put("/"+nav.getUrl()+"/", nav.getId());
}
}
_logger.debug("navigationsMap : "+navigationsMap);
}
UserInfo userInfo =WebContext.getUserInfo();//取得登录用户
if(userInfo==null||WebContext.getRoles()==null){//判断用户和角色,判断用户是否登录用户
//判断用户是否登录
if
(
WebContext
.
getAuthentication
()==
null
||
WebContext
.
getAuthentication
().
getAuthorities
()==
null
){
//判断用户和角色,判断用户是否登录用户
RequestDispatcher
dispatcher
=
request
.
getRequestDispatcher
(
"/login"
);
dispatcher
.
forward
(
request
,
response
);
return
false
;
}
//取得当前访问地址 Access URL
String accessURI=request.getRequestURI().substring(request.getContextPath().length());
if(!accessURI.endsWith("/")){
accessURI=accessURI+"/";
}
//定义匿名可以访问URL地址
if(applicationConfig.getAnonymousAccessUrls().containsKey(accessURI)){
_logger.debug("Access URI : "+accessURI+" , AnonymousAccessUrls .");
return true;
}
boolean hasNavAccess=true;
//菜单权限匹配
if(navigationsMap.containsKey(accessURI)){//判断当前访问URL地址是否需要进行权限校验
hasNavAccess=false;
for(Navigations nav : WebContext.getNavigations()){//获取当前登录用户拥有URL访问列表
String haveURL=nav.getUrl();
if(haveURL==null)continue;
if(!haveURL.endsWith("/")){haveURL="/"+haveURL+"/";}
if(haveURL.endsWith(accessURI)){
hasNavAccess=true;
}
}
_logger.debug("Access URI : "+accessURI+" , hasNavAccess "+hasNavAccess);
if(hasNavAccess)return true;
}
boolean
hasAccess
=
true
;
/*
boolean preHandler = super.preHandle(request, response, handler);
...
...
@@ -104,6 +63,6 @@ public class PermissionAdapter extends HandlerInterceptorAdapter {
return false;
}
}*/
return
true
;
return
hasAccess
;
}
}
maxkey-web-manage/src/main/resources/config/applicationConfig.properties
浏览文件 @
67478a71
...
...
@@ -25,11 +25,11 @@ config.datasource.driverclass=com.mysql.jdbc.Driver
#
config.datasource.url
=
jdbc:mysql://localhost/maxkey?autoReconnect=true&characterEncoding=UTF-8
config.datasource.username
=
root
#connsec/bb2002b9f55b05d3e0e6f34ec5321051
#root/4f8520865b3793b07b23e16bc1f117b8
config.datasource.password
=
bb2002b9f55b05d3e0e6f34ec5321051
#db2,derby,mysql,oracle,postgresql,sqlserver at com.connsec.db.mybatis.dialect.Dialect
#root/maxkey
config.datasource.password
=
maxkey
#db2,derby,mysql,oracle,postgresql,sqlserver at Dialect
config.datasource.database
=
mysql
config.datasource.password.encrypt
=
false
# End DataBase configuration
############################################################################
# CharacterEncoding
...
...
@@ -57,11 +57,11 @@ config.server.prefix=${config.server.name}/manage
############################################################################
# EMAIL configuration
config.email.username
=
test@
connsec.com
config.email.username
=
test@
maxkey.org
config.email.password
=
3&8Ujbnm5hkjhFD
config.email.smtpHost
=
smtp.exmail.qq.com
config.email.port
=
25
config.email.senderMail
=
test@
connsec.com
config.email.senderMail
=
test@
maxkey.org
config.email.ssl
=
false
############################################################################
...
...
maxkey-web-manage/src/main/resources/spring/maxkey-mgt.xml
浏览文件 @
67478a71
...
...
@@ -34,62 +34,8 @@
<property
name=
"ignoreUnresolvablePlaceholders"
value=
"true"
/>
</bean>
<!-- dataSoruce Config -->
<bean
id=
"dataSoruceConfig"
class=
"org.maxkey.config.DataSoruceConfig"
>
<property
name=
"driverClass"
value=
"${config.datasource.driverclass}"
/>
<property
name=
"url"
value=
"${config.datasource.url}"
/>
<property
name=
"username"
value=
"${config.datasource.username}"
/>
<property
name=
"password"
value=
"${config.datasource.password}"
/>
<property
name=
"database"
value=
"${config.datasource.database}"
/>
<property
name=
"encrypt"
value=
"true"
/>
</bean>
<context:component-scan
base-package=
"org.maxkey.config"
/>
<!-- Character Encoding Config -->
<bean
id=
"characterEncodingConfig"
class=
"org.maxkey.config.CharacterEncodingConfig"
>
<property
name=
"encoding"
value=
"${config.characterencoding.encoding}"
/>
<property
name=
"fromCharSet"
value=
"${config.characterencoding.fromcharset}"
/>
<property
name=
"toCharSet"
value=
"${config.characterencoding.tocharset}"
/>
</bean>
<!-- email Config -->
<bean
id=
"emailConfig"
class=
"org.maxkey.config.EmailConfig"
>
<property
name=
"username"
value=
"${config.email.username}"
/>
<property
name=
"password"
value=
"${config.email.password}"
/>
<property
name=
"smtpHost"
value=
"${config.email.smtpHost}"
/>
<property
name=
"port"
value=
"${config.email.port}"
/>
<property
name=
"senderMail"
value=
"${config.email.senderMail}"
/>
<property
name=
"ssl"
value=
"${config.email.ssl}"
/>
</bean>
<!-- Login Config -->
<bean
id=
"loginConfig"
class=
"org.maxkey.config.LoginConfig"
>
<property
name=
"captcha"
value=
"${config.login.captcha}"
/>
<property
name=
"oneTimePwd"
value=
"${config.login.onetimepwd}"
/>
<property
name=
"socialSignOn"
value=
"${config.login.socialsignon}"
/>
<property
name=
"kerberos"
value=
"${config.login.kerberos}"
/>
<property
name=
"wsFederation"
value=
"${config.login.wsfederation}"
/>
<property
name=
"remeberMe"
value=
"${config.login.remeberme}"
/>
<property
name=
"defaultUri"
value=
"${config.login.default.uri}"
/>
</bean>
<!-- Application Config -->
<bean
id=
"applicationConfig"
class=
"org.maxkey.config.ApplicationConfig"
>
<property
name=
"dataSoruceConfig"
ref=
"dataSoruceConfig"
/>
<property
name=
"characterEncodingConfig"
ref=
"characterEncodingConfig"
/>
<property
name=
"emailConfig"
ref=
"emailConfig"
/>
<property
name=
"loginConfig"
ref=
"loginConfig"
/>
<property
name=
"domainName"
value=
"${config.domain.name}"
/>
<property
name=
"serverPrefix"
value=
"${config.server.maxkey.uri}"
/>
<property
name=
"manageUri"
value=
"${config.manage.uri}"
/>
<property
name=
"whiteList"
value=
"${config.ipaddress.whitelist}"
/>
<property
name=
"anonymousAccessUrls"
>
<list>
<value>
null
</value>
</list>
</property>
</bean>
<bean
id=
"keyStoreLoader"
class=
"org.maxkey.crypto.keystore.KeyStoreLoader"
>
<property
name=
"entityName"
value=
"${config.saml.v20.idp.issuing.entity.id}"
/>
<property
name=
"keystorePassword"
value=
"${config.saml.v20.idp.keystore.password}"
/>
...
...
maxkey-web-maxkey/src/main/java/org/maxkey/web/filter/IpAddressFilter.java
浏览文件 @
67478a71
...
...
@@ -27,8 +27,10 @@ public class IpAddressFilter implements Filter {
private
static
final
Logger
_logger
=
LoggerFactory
.
getLogger
(
IpAddressFilter
.
class
);
@Autowired
@Qualifier
(
"applicationConfig"
)
private
ApplicationConfig
applicationConfig
;
@Qualifier
(
"applicationConfig"
)
private
ApplicationConfig
applicationConfig
;
boolean
whiteList
=
false
;
@Override
public
void
init
(
FilterConfig
filterConfig
)
throws
ServletException
{
...
...
@@ -59,7 +61,7 @@ public class IpAddressFilter implements Filter {
}
//白名单地址
if
(
applicationConfig
.
isWhiteList
()
&&!
IpAddressCache
.
ipAddressWhiteListMap
.
containsKey
(
ipAddress
)){
if
(
whiteList
&&!
IpAddressCache
.
ipAddressWhiteListMap
.
containsKey
(
ipAddress
)){
_logger
.
info
(
"You IpAddress not in White List "
+
ipAddress
);
RequestDispatcher
dispatcher
=
request
.
getRequestDispatcher
(
"/accessdeny"
);
dispatcher
.
forward
(
request
,
response
);
...
...
maxkey-web-maxkey/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java
浏览文件 @
67478a71
package
org.maxkey.web.interceptor
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
javax.servlet.RequestDispatcher
;
...
...
@@ -8,8 +7,6 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse
;
import
org.maxkey.config.ApplicationConfig
;
import
org.maxkey.domain.Navigations
;
import
org.maxkey.domain.UserInfo
;
import
org.maxkey.web.WebContext
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -40,70 +37,31 @@ public class PermissionAdapter extends HandlerInterceptorAdapter {
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
_logger
.
debug
(
"PermissionAdapter preHandle"
);
//加载定义的功能菜单地址
/*if(navigationsMap==null){
List<Navigations> navigationsList=((NavigationsService)WebContext.getBean("navigationsService")).query(null);
navigationsMap=new ConcurrentHashMap<String ,String >();
for(Navigations nav : navigationsList){
if(nav.getUrl()==null)continue;
if(nav.getUrl().endsWith("/")){
navigationsMap.put("/"+nav.getUrl(), nav.getId());
}else{
navigationsMap.put("/"+nav.getUrl()+"/", nav.getId());
}
}
_logger.debug("navigationsMap : "+navigationsMap);
}
UserInfo userInfo =WebContext.getUserInfo();//取得登录用户
if(userInfo==null||WebContext.getRoles()==null){//判断用户和角色,判断用户是否登录用户
RequestDispatcher dispatcher = request.getRequestDispatcher("/login");
dispatcher.forward(request, response);
return false;
}
//取得当前访问地址 Access URL
String accessURI=request.getRequestURI().substring(request.getContextPath().length());
if(!accessURI.endsWith("/")){
accessURI=accessURI+"/";
}
//定义匿名可以访问URL地址
if(applicationConfig.getAnonymousAccessUrls().containsKey(accessURI)){
_logger.debug("Access URI : "+accessURI+" , AnonymousAccessUrls .");
return true;
}
boolean hasNavAccess=true;
//菜单权限匹配
if(navigationsMap.containsKey(accessURI)){//判断当前访问URL地址是否需要进行权限校验
hasNavAccess=false;
for(Navigations nav : WebContext.getNavigations()){//获取当前登录用户拥有URL访问列表
String haveURL=nav.getUrl();
if(haveURL==null)continue;
if(!haveURL.endsWith("/")){haveURL="/"+haveURL+"/";}
if(haveURL.endsWith(accessURI)){
hasNavAccess=true;
}
}
_logger.debug("Access URI : "+accessURI+" , hasNavAccess "+hasNavAccess);
if(hasNavAccess)return true;
}
/*
boolean preHandler = super.preHandle(request, response, handler);
if(preHandler) {
preHandler = false;
if(!preHandler){//无权限转向
log.debug("You do not have permission to access "+accessUrl);
RequestDispatcher dispatcher = request.getRequestDispatcher("/accessdeny");
//判断用户是否登录
if
(
WebContext
.
getAuthentication
()==
null
||
WebContext
.
getAuthentication
().
getAuthorities
()==
null
){
//判断用户和角色,判断用户是否登录用户
RequestDispatcher
dispatcher
=
request
.
getRequestDispatcher
(
"/login"
);
dispatcher
.
forward
(
request
,
response
);
return
false
;
}
}*/
return
true
;
boolean
hasAccess
=
true
;
/*
boolean preHandler = super.preHandle(request, response, handler);
if(preHandler) {
preHandler = false;
if(!preHandler){//无权限转向
log.debug("You do not have permission to access "+accessUrl);
RequestDispatcher dispatcher = request.getRequestDispatcher("/accessdeny");
dispatcher.forward(request, response);
return false;
}
}*/
return
hasAccess
;
}
}
maxkey-web-maxkey/src/main/resources/config/applicationConfig.properties
浏览文件 @
67478a71
############################################################################
# MaxKey
############################################################################
# domain name configuration
config.server.subdomain
=
maxkey.org
config.server.domain
=
sso.${config.server.subdomain}
config.server.name
=
http://${config.server.domain}
config.server.prefix.uri
=
${config.server.name}/maxkey
#default.uri
config.server.default.uri
=
${config.server.prefix.uri}/main
config.server.manage.uri
=
${config.server.name}:9521/maxkey-mgt/login
############################################################################
# DataBase configuration
############################################################################
#db2,derby,mysql,oracle,postgresql,sqlserver at com.connsec.db.mybatis.dialect.Dialect
...
...
@@ -25,18 +34,16 @@ config.datasource.driverclass=com.mysql.jdbc.Driver
#
config.datasource.url
=
jdbc:mysql://localhost/maxkey?autoReconnect=true&characterEncoding=UTF-8
config.datasource.username
=
root
#connsec/bb2002b9f55b05d3e0e6f34ec5321051
#root/4f8520865b3793b07b23e16bc1f117b8
config.datasource.password
=
bb2002b9f55b05d3e0e6f34ec5321051
config.datasource.password
=
maxkey
config.datasource.password.encrypt
=
false
############################################################################
# EMAIL configuration
############################################################################
config.email.username
=
test@
connsec.com
config.email.username
=
test@
maxkey.org
config.email.password
=
3&8Ujbnm5hkjhFD
config.email.smtpHost
=
smtp.exmail.qq.com
config.email.port
=
25
config.email.senderMail
=
test@
connsec.com
config.email.senderMail
=
test@
maxkey.org
config.email.ssl
=
false
############################################################################
...
...
@@ -45,8 +52,8 @@ config.email.ssl=false
# CharacterEncoding true/false
config.characterencoding.encoding
=
true
config.characterencoding.
fromcharset
=
iso8859-1
config.characterencoding.
tocharset
=
UTF-8
config.characterencoding.
charset.from
=
iso8859-1
config.characterencoding.
charset.to
=
UTF-8
config.app.issuer
=
CN=ConSec,CN=COM,CN=SH
...
...
maxkey-web-maxkey/src/main/resources/config/applicationLogin.properties
浏览文件 @
67478a71
############################################################################
# MaxKey
############################################################################
# domain name configuration
config.domain.name
=
sso.maxkey.org
config.server.name
=
http://${config.domain.name}
config.server.maxkey.uri
=
${config.server.name}/maxkey
############################################################################
# Login configuration
#enable captcha
config.login.captcha
=
true
...
...
@@ -22,13 +16,9 @@ config.login.wsfederation=false
config.login.remeberme
=
true
#validity
config.login.remeberme.validity
=
#default.uri
#to appList page
config.login.default.uri
=
appList
#to default application web site
#config.login.default.uri=http://www.connsec.com
config.manage.uri
=
http://login.connsec.com:9500/manage/login
#to default application web site
config.login.default.uri
=
appList
config.ipaddress.whitelist
=
false
############################################################################
...
...
@@ -42,16 +32,6 @@ config.support.kerberos.default.fulluserdomain=CONNSEC.COM
config.support.kerberos.default.crypto
=
846KZSzYq56M6d5o
#Kerberos Authentication server RUL
config.support.kerberos.default.redirecturi
=
http://sso.maxkey.org/kerberos/authn/
############################################################################
# CAS Login configuration
############################################################################
config.support.cas.login.url
=
http://sso.maxkey.org/cas/login
#
config.support.cas.login.service
=
http://sso.maxkey.org/maxkey/cas
#
config.support.cas.login.validation.url
=
http://sso.maxkey.org/cas
############################################################################
# HTTPHEADER Login configuration
############################################################################
...
...
@@ -91,8 +71,8 @@ config.support.wsfederation.logoutUrl=https://adfs.connsec.com/adfs/ls/?wa=wsign
#############################################################################
#############################################################################
config.oidc.metadata.issuer
=
${config.server.
maxkey
.uri}
config.oidc.metadata.authorizationEndpoint
=
${config.server.
maxkey
.uri}/oauth/v20/authorize
config.oidc.metadata.tokenEndpoint
=
${config.server.
maxkey
.uri}/oauth/v20/token
config.oidc.metadata.userinfoEndpoint
=
${config.server.
maxkey
.uri}/api/connect/userinfo
config.oidc.metadata.issuer
=
${config.server.
prefix
.uri}
config.oidc.metadata.authorizationEndpoint
=
${config.server.
prefix
.uri}/oauth/v20/authorize
config.oidc.metadata.tokenEndpoint
=
${config.server.
prefix
.uri}/oauth/v20/token
config.oidc.metadata.userinfoEndpoint
=
${config.server.
prefix
.uri}/api/connect/userinfo
#############################################################################
maxkey-web-maxkey/src/main/resources/spring/maxkey-persistence.xml
浏览文件 @
67478a71
...
...
@@ -71,7 +71,7 @@
org.maxkey.domain.apps,
"
/>
<property
name=
"timeout"
value=
"30"
/>
<property
name=
"mapperLocations"
value=
"classpath*:org/maxkey/dao/persistence/xml/#{dataSoruceConfig.database}/*.xml"
/>
<property
name=
"mapperLocations"
value=
"classpath*:
/
org/maxkey/dao/persistence/xml/#{dataSoruceConfig.database}/*.xml"
/>
<property
name=
"interceptors"
>
<list>
<ref
bean=
"StatementHandlerInterceptor"
/>
...
...
maxkey-web-maxkey/src/main/resources/spring/maxkey-security.xml
浏览文件 @
67478a71
...
...
@@ -13,29 +13,7 @@
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>
<!--
<sec:http pattern="/jquery/**" security="none" />
<sec:http pattern="/images/**" security="none" />
<sec:http pattern="/css/**" security="none" />
<sec:http pattern="/js/**" security="none" />
<sec:http pattern="/metadata/saml20/**" security="none" />
<sec:http pattern="/api/oauth/v20/me" security="none" />
<sec:http pattern="/api/connect/v10/userinfo" security="none" />
cas api
<sec:http pattern="/authz/cas/validate" security="none" />
<sec:http pattern="/authz/cas/serviceValidate" security="none" />
<sec:http pattern="/authz/cas/proxyValidate" security="none" />
<sec:http pattern="/authz/cas/proxy" security="none" />
<sec:http pattern="/authz/cas/p3/serviceValidate" security="none" />
<sec:http pattern="/authz/cas/p3/proxyValidate" security="none" />
-->
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>
<!-- enable autowire -->
<context:annotation-config
/>
...
...
@@ -107,10 +85,10 @@
</mvc:interceptor>
<ref
bean=
"localeChangeInterceptor"
/>
<ref
bean=
"localeChangeInterceptor"
/>
</mvc:interceptors>
<bean
id=
"remeberMeService"
class=
"org.maxkey.authn.support.rememberme.JdbcRemeberMeService"
>
<bean
id=
"remeberMeService"
class=
"org.maxkey.authn.support.rememberme.JdbcRemeberMeService"
>
<constructor-arg
ref=
"jdbcTemplate"
/>
<property
name=
"validity"
value=
"${config.login.remeberme.validity}"
/>
</bean>
...
...
maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml
浏览文件 @
67478a71
...
...
@@ -21,7 +21,7 @@
<!-- LocaleResolver -->
<bean
id=
"localeResolver"
class=
"org.springframework.web.servlet.i18n.CookieLocaleResolver"
>
<property
name=
"cookieDomain"
value=
"#{applicationConfig.subDomainName}"
/>
<property
name=
"cookieName"
value=
"
single_sign_on
_lang"
/>
<property
name=
"cookieName"
value=
"
maxkey
_lang"
/>
<property
name=
"cookieMaxAge"
value=
"604800"
/>
<!-- auto select language by brower remove -->
<!--<property name="defaultLocale" value="en" /> -->
...
...
maxkey-web-maxkey/src/main/resources/spring/maxkey.xml
浏览文件 @
67478a71
...
...
@@ -30,65 +30,10 @@
</property>
<property
name=
"ignoreUnresolvablePlaceholders"
value=
"true"
/>
</bean>
<!-- dataSoruce Config -->
<bean
id=
"dataSoruceConfig"
class=
"org.maxkey.config.DataSoruceConfig"
>
<property
name=
"driverClass"
value=
"${config.datasource.driverclass}"
/>
<property
name=
"url"
value=
"${config.datasource.url}"
/>
<property
name=
"username"
value=
"${config.datasource.username}"
/>
<property
name=
"password"
value=
"${config.datasource.password}"
/>
<property
name=
"database"
value=
"${config.datasource.database}"
/>
<property
name=
"encrypt"
value=
"true"
/>
</bean>
<!-- Character Encoding Config -->
<bean
id=
"characterEncodingConfig"
class=
"org.maxkey.config.CharacterEncodingConfig"
>
<property
name=
"encoding"
value=
"${config.characterencoding.encoding}"
/>
<property
name=
"fromCharSet"
value=
"${config.characterencoding.fromcharset}"
/>
<property
name=
"toCharSet"
value=
"${config.characterencoding.tocharset}"
/>
</bean>
<!-- email Config -->
<bean
id=
"emailConfig"
class=
"org.maxkey.config.EmailConfig"
>
<property
name=
"username"
value=
"${config.email.username}"
/>
<property
name=
"password"
value=
"${config.email.password}"
/>
<property
name=
"smtpHost"
value=
"${config.email.smtpHost}"
/>
<property
name=
"port"
value=
"${config.email.port}"
/>
<property
name=
"senderMail"
value=
"${config.email.senderMail}"
/>
<property
name=
"ssl"
value=
"${config.email.ssl}"
/>
</bean>
<!-- Login Config -->
<bean
id=
"loginConfig"
class=
"org.maxkey.config.LoginConfig"
>
<property
name=
"captcha"
value=
"${config.login.captcha}"
/>
<property
name=
"oneTimePwd"
value=
"${config.login.onetimepwd}"
/>
<property
name=
"socialSignOn"
value=
"${config.login.socialsignon}"
/>
<property
name=
"kerberos"
value=
"${config.login.kerberos}"
/>
<property
name=
"wsFederation"
value=
"${config.login.wsfederation}"
/>
<property
name=
"remeberMe"
value=
"${config.login.remeberme}"
/>
<property
name=
"defaultUri"
value=
"${config.login.default.uri}"
/>
</bean>
<!-- Application Config -->
<bean
id=
"applicationConfig"
class=
"org.maxkey.config.ApplicationConfig"
>
<property
name=
"dataSoruceConfig"
ref=
"dataSoruceConfig"
/>
<property
name=
"characterEncodingConfig"
ref=
"characterEncodingConfig"
/>
<property
name=
"emailConfig"
ref=
"emailConfig"
/>
<property
name=
"loginConfig"
ref=
"loginConfig"
/>
<property
name=
"domainName"
value=
"${config.domain.name}"
/>
<property
name=
"serverPrefix"
value=
"${config.server.maxkey.uri}"
/>
<property
name=
"manageUri"
value=
"${config.manage.uri}"
/>
<property
name=
"whiteList"
value=
"${config.ipaddress.whitelist}"
/>
<property
name=
"anonymousAccessUrls"
>
<list>
<value>
null
</value>
</list>
</property>
</bean>
<!-- Scans the classpath for annotated components that will be auto-registered as Spring beans.
@Controller and @Service. Make sure to set the correct base-package-->
<context:component-scan
base-package=
"org.maxkey.config"
/>
<!-- domain bean -->
<context:component-scan
base-package=
"org.maxkey.domain"
/>
<context:component-scan
base-package=
"org.maxkey.domain.apps"
/>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录