Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
JeeSpringCloud
Commits
05beecd0
"eladmin-system/src/vscode:/vscode.git/clone" did not exist on "59bf09eb31eabf0509cd2d00734994123fff58a8"
Commit
05beecd0
authored
Nov 12, 2018
by
Huang
Browse files
no commit message
parent
bc5dd330
Changes
461
Hide whitespace changes
Inline
Side-by-side
JeeSpringCloud/jeespring-framework/pom.xml
0 → 100644
View file @
05beecd0
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.jeespring
</groupId>
<artifactId>
jeespring-framework
</artifactId>
<name>
jeespring-framework
</name>
<description>
jeespring-framework
</description>
<version>
1.0.0
</version>
<packaging>
jar
</packaging>
<parent>
<groupId>
com.jeespring
</groupId>
<artifactId>
jeespring
</artifactId>
<version>
1.0.0
</version>
<relativePath>
../pom.xml
</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>
com.ckfinder
</groupId>
<artifactId>
apache-ant-zip
</artifactId>
<version>
2.3
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/../jeespring-web/src/main/webapp/WEB-INF/lib/apache-ant-zip-2.3.jar
</systemPath>
</dependency>
<dependency>
<groupId>
com.ckfinder
</groupId>
<artifactId>
ckfinder
</artifactId>
<version>
2.3
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/../jeespring-web/src/main/webapp/WEB-INF/lib/ckfinder-2.3.jar
</systemPath>
</dependency>
<dependency>
<groupId>
com.ckfinder
</groupId>
<artifactId>
ckfinderplugin-fileeditor
</artifactId>
<version>
2.3
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/../jeespring-web/src/main/webapp/WEB-INF/lib/ckfinderplugin-fileeditor-2.3.jar
</systemPath>
</dependency>
<dependency>
<groupId>
com.ckfinder
</groupId>
<artifactId>
ckfinderplugin-imageresize
</artifactId>
<version>
2.3
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/../jeespring-web/src/main/webapp/WEB-INF/lib/ckfinderplugin-imageresize-2.3.jar
</systemPath>
</dependency>
<dependency>
<groupId>
com.swetake
</groupId>
<artifactId>
qrcode
</artifactId>
<version>
1.5
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/../jeespring-web/src/main/webapp/WEB-INF/lib/QRCode-1.5.jar
</systemPath>
</dependency>
<dependency>
<groupId>
bitwalker
</groupId>
<artifactId>
UserAgentUtils
</artifactId>
<version>
1.13
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/../jeespring-web/src/main/webapp/WEB-INF/lib/UserAgentUtils-1.13.jar
</systemPath>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>
src/main/resources
</directory>
</resource>
</resources>
</build>
</project>
\ No newline at end of file
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/annotation/FieldName.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.annotation
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* bean中文名注解
*/
@Target
(
ElementType
.
METHOD
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
FieldName
{
String
value
();
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/beanvalidator/AddGroup.java
0 → 100644
View file @
05beecd0
/**
* * Copyright © 2015-2020 <a href="https://gitee.com/JeeHuangBingGui/JeeSpring">JeeSpring</a> All rights reserved..
*/
package
com.jeespring.common.beanvalidator
;
/**
* 添加Bean验证组
* @author 黄炳桂 516821420@qq.com
*
*/
public
interface
AddGroup
{
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/beanvalidator/DefaultGroup.java
0 → 100644
View file @
05beecd0
/**
* * Copyright © 2015-2020 <a href="https://gitee.com/JeeHuangBingGui/JeeSpring">JeeSpring</a> All rights reserved..
*/
package
com.jeespring.common.beanvalidator
;
/**
* 默认Bean验证组
* @author 黄炳桂 516821420@qq.com
*/
public
interface
DefaultGroup
{
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/beanvalidator/EditGroup.java
0 → 100644
View file @
05beecd0
/**
* * Copyright © 2015-2020 <a href="https://gitee.com/JeeHuangBingGui/JeeSpring">JeeSpring</a> All rights reserved..
*/
package
com.jeespring.common.beanvalidator
;
/**
* 编辑Bena验证组
* @author 黄炳桂 516821420@qq.com
*/
public
interface
EditGroup
{
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/config/Global.java
0 → 100644
View file @
05beecd0
/**
* Copyright © 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
*/
package
com.jeespring.common.config
;
import
com.ckfinder.connector.ServletContextFactory
;
import
com.google.common.collect.Maps
;
import
com.jeespring.common.utils.PropertiesLoader
;
import
com.jeespring.common.utils.StringUtils
;
import
com.jeespring.modules.sys.entity.SysConfig
;
import
com.jeespring.modules.sys.service.SysConfigService
;
import
org.apache.ibatis.io.Resources
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.bind.RelaxedPropertyResolver
;
import
org.springframework.core.env.Environment
;
import
org.springframework.core.io.DefaultResourceLoader
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.Reader
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Properties
;
/**
* 全局配置类
*
* @author 黄炳桂 516821420@qq.com
* @version 2014-06-25
*/
public
class
Global
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
Global
.
class
);
static
RelaxedPropertyResolver
resolver
;
//@Autowired
//private static Environment env;
/**
* 当前对象实例
*/
private
static
Global
global
=
new
Global
();
/**
* 保存全局属性值
*/
private
static
Map
<
String
,
String
>
map
=
Maps
.
newHashMap
();
/**
* 属性文件加载对象
*/
private
static
PropertiesLoader
loader
=
new
PropertiesLoader
(
"bootstrap.yml"
);
/**
* 显示/隐藏
*/
public
static
final
String
SHOW
=
"1"
;
public
static
final
String
HIDE
=
"0"
;
/**
* 是/否
*/
public
static
final
String
YES
=
"1"
;
public
static
final
String
NO
=
"0"
;
/**
* 对/错
*/
public
static
final
String
TRUE
=
"true"
;
public
static
final
String
FALSE
=
"false"
;
/**
* 上传文件基础虚拟路径
*/
public
static
final
String
USERFILES_BASE_URL
=
"/userfiles/"
;
/**
* 获取当前对象实例
*/
public
static
Global
getInstance
()
{
return
global
;
}
/**
* 获取配置
* ${fns:getConfig('adminPath')}
*/
public
static
String
getConfig
(
String
key
)
{
String
value
=
map
.
get
(
key
);
if
(
value
==
null
)
{
try
{
value
=
resolver
.
getProperty
(
key
);
//value =env.getProperty(key);
if
(
StringUtils
.
isBlank
(
value
))
{
throw
new
RuntimeException
(
"value null"
);
}
map
.
put
(
key
,
value
);
}
catch
(
Exception
e
)
{
value
=
loader
.
getProperty
(
key
);
map
.
put
(
key
,
value
!=
null
?
value
:
StringUtils
.
EMPTY
);
}
}
return
value
;
}
public
static
String
getConfig
(
String
key
,
String
value
){
String
result
=
getConfig
(
key
);
if
(
result
==
StringUtils
.
EMPTY
){
return
value
;
}
return
result
;
}
/**
* 获取管理端根路径
*/
public
static
String
getAdminPath
()
{
return
getConfig
(
"adminPath"
);
}
/**
* 获取前端根路径
*/
public
static
String
getFrontPath
()
{
return
getConfig
(
"frontPath"
);
}
/**
* 获取URL后缀
*/
public
static
String
getUrlSuffix
()
{
return
getConfig
(
"urlSuffix"
);
}
/**
* 是否是演示模式,演示模式下不能修改用户、角色、密码、菜单、授权
*/
public
static
Boolean
isDemoMode
()
{
String
dm
=
getConfig
(
"demoMode"
);
return
"true"
.
equals
(
dm
)
||
"1"
.
equals
(
dm
);
}
public
static
String
isDemoModeDescription
()
{
String
dmd
=
getConfig
(
"demoModeDescription"
);
if
(
dmd
==
null
){
return
"演示版启用为系统能正常演示,暂时不允许操作!"
;
}
return
dmd
;
}
public
static
Boolean
isDubbo
()
{
String
dm
=
getConfig
(
"dubbo.run"
);
return
"true"
.
equals
(
dm
)
||
"1"
.
equals
(
dm
);
}
/**
* 获取上传文件的根目录
*
* @return
*/
public
static
String
getUserfilesBaseDir
()
{
String
dir
=
getConfig
(
"userfiles.basedir"
);
if
(
StringUtils
.
isBlank
(
dir
))
{
try
{
dir
=
ServletContextFactory
.
getServletContext
().
getRealPath
(
"/"
);
}
catch
(
Exception
e
)
{
return
""
;
}
}
if
(!
dir
.
endsWith
(
"/"
))
{
dir
+=
"/"
;
}
return
dir
;
}
public
static
String
getJdbcType
()
{
if
(
map
.
containsKey
(
"spring.datasource.url"
))
{
return
map
.
get
(
"spring.datasource.url"
);
}
try
{
String
url
=
resolver
.
getProperty
(
"spring.datasource.url"
);
//String url = env.getProperty("spring.datasource.url");
String
type
=
getDbType
(
url
);
map
.
put
(
"spring.datasource.url"
,
type
);
return
type
;
}
catch
(
Exception
e
)
{
logger
.
error
(
"get jdbcType error"
,
e
);
}
logger
.
error
(
"return the defaut jdbc type is mysql"
);
return
"mysql"
;
}
private
static
String
getDbType
(
String
rawUrl
)
{
return
rawUrl
==
null
?
null
:
(!
rawUrl
.
startsWith
(
"jdbc:derby:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:derby:"
)
?
(!
rawUrl
.
startsWith
(
"jdbc:mysql:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:cobar:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:mysql:"
)
?
(
rawUrl
.
startsWith
(
"jdbc:mariadb:"
)
?
"mariadb"
:
(!
rawUrl
.
startsWith
(
"jdbc:oracle:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:oracle:"
)
?
(
rawUrl
.
startsWith
(
"jdbc:alibaba:oracle:"
)
?
"AliOracle"
:
(!
rawUrl
.
startsWith
(
"jdbc:microsoft:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:microsoft:"
)
?
(!
rawUrl
.
startsWith
(
"jdbc:sqlserver:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:sqlserver:"
)
?
(!
rawUrl
.
startsWith
(
"jdbc:sybase:Tds:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:sybase:"
)
?
(!
rawUrl
.
startsWith
(
"jdbc:jtds:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:jtds:"
)
?
(!
rawUrl
.
startsWith
(
"jdbc:fake:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:mock:"
)
?
(!
rawUrl
.
startsWith
(
"jdbc:postgresql:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:postgresql:"
)
?
(
rawUrl
.
startsWith
(
"jdbc:edb:"
)
?
"edb"
:
(!
rawUrl
.
startsWith
(
"jdbc:hsqldb:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:hsqldb:"
)
?
(
rawUrl
.
startsWith
(
"jdbc:odps:"
)
?
"odps"
:
(
rawUrl
.
startsWith
(
"jdbc:db2:"
)
?
"db2"
:
(
rawUrl
.
startsWith
(
"jdbc:sqlite:"
)
?
"sqlite"
:
(
rawUrl
.
startsWith
(
"jdbc:ingres:"
)
?
"ingres"
:
(!
rawUrl
.
startsWith
(
"jdbc:h2:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:h2:"
)
?
(
rawUrl
.
startsWith
(
"jdbc:mckoi:"
)
?
"mckoi"
:
(
rawUrl
.
startsWith
(
"jdbc:cloudscape:"
)
?
"cloudscape"
:
(!
rawUrl
.
startsWith
(
"jdbc:informix-sqli:"
)
&&
!
rawUrl
.
startsWith
(
"jdbc:log4jdbc:informix-sqli:"
)
?
(
rawUrl
.
startsWith
(
"jdbc:timesten:"
)
?
"timesten"
:
(
rawUrl
.
startsWith
(
"jdbc:as400:"
)
?
"as400"
:
(
rawUrl
.
startsWith
(
"jdbc:sapdb:"
)
?
"sapdb"
:
(
rawUrl
.
startsWith
(
"jdbc:JSQLConnect:"
)
?
"JSQLConnect"
:
(
rawUrl
.
startsWith
(
"jdbc:JTurbo:"
)
?
"JTurbo"
:
(
rawUrl
.
startsWith
(
"jdbc:firebirdsql:"
)
?
"firebirdsql"
:
(
rawUrl
.
startsWith
(
"jdbc:interbase:"
)
?
"interbase"
:
(
rawUrl
.
startsWith
(
"jdbc:pointbase:"
)
?
"pointbase"
:
(
rawUrl
.
startsWith
(
"jdbc:edbc:"
)
?
"edbc"
:
(
rawUrl
.
startsWith
(
"jdbc:mimer:multi1:"
)
?
"mimer"
:
(
rawUrl
.
startsWith
(
"jdbc:dm:"
)
?
"dm"
:
(
rawUrl
.
startsWith
(
"jdbc:kingbase:"
)
?
"kingbase"
:
(
rawUrl
.
startsWith
(
"jdbc:log4jdbc:"
)
?
"log4jdbc"
:
(
rawUrl
.
startsWith
(
"jdbc:hive:"
)
?
"hive"
:
(
rawUrl
.
startsWith
(
"jdbc:hive2:"
)
?
"hive"
:
(
rawUrl
.
startsWith
(
"jdbc:phoenix:"
)
?
"phoenix"
:
null
))))))))))))))))
:
"informix"
)))
:
"h2"
)))))
:
"hsql"
))
:
"postgresql"
)
:
"mock"
)
:
"jtds"
)
:
"sybase"
)
:
"sqlserver"
)
:
"sqlserver"
))
:
"oracle"
))
:
"mysql"
)
:
"derby"
);
}
/**
* 获取工程路径
* @return
*/
public
static
String
getProjectPath
(){
// 如果配置了工程路径,则直接返回,否则自动获取。
String
projectPath
=
Global
.
getConfig
(
"projectPath"
);
if
(
StringUtils
.
isNotBlank
(
projectPath
)){
return
projectPath
;
}
try
{
File
file
=
new
DefaultResourceLoader
().
getResource
(
""
).
getFile
();
if
(
file
!=
null
){
while
(
true
){
File
f
=
new
File
(
file
.
getPath
()
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
);
if
(
f
==
null
||
f
.
exists
()){
break
;
}
if
(
file
.
getParentFile
()
!=
null
){
file
=
file
.
getParentFile
();
}
else
{
break
;
}
}
projectPath
=
file
.
toString
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
projectPath
;
}
/**
* 写入properties信息
*
* @param key
* 名称
* @param value
* 值
*/
public
static
void
modifyConfig
(
String
key
,
String
value
)
{
try
{
// 从输入流中读取属性列表(键和元素对)
Properties
prop
=
getProperties
();
prop
.
setProperty
(
key
,
value
);
String
path
=
Global
.
class
.
getResource
(
"/jeespring.properties"
).
getPath
();
FileOutputStream
outputFile
=
new
FileOutputStream
(
path
);
prop
.
store
(
outputFile
,
"modify"
);
outputFile
.
close
();
outputFile
.
flush
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/**
* (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
* 返回 Properties
* @return
*/
public
static
Properties
getProperties
(){
Properties
prop
=
new
Properties
();
try
{
Reader
reader
=
Resources
.
getResourceAsReader
(
"/jeespring.properties"
);
prop
.
load
(
reader
);
}
catch
(
Exception
e
)
{
return
null
;
}
return
prop
;
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/config/ScheduleConfig.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.quartz.SchedulerFactoryBean
;
import
javax.sql.DataSource
;
import
java.util.Properties
;
/**
* 定时任务配置
*
* @author JeeSpring
*
*/
@Configuration
public
class
ScheduleConfig
{
@Bean
public
SchedulerFactoryBean
schedulerFactoryBean
(
DataSource
dataSource
)
{
SchedulerFactoryBean
factory
=
new
SchedulerFactoryBean
();
factory
.
setDataSource
(
dataSource
);
// quartz参数
Properties
prop
=
new
Properties
();
prop
.
put
(
"org.quartz.scheduler.instanceName"
,
"RuoyiScheduler"
);
prop
.
put
(
"org.quartz.scheduler.instanceId"
,
"AUTO"
);
// 线程池配置
prop
.
put
(
"org.quartz.threadPool.class"
,
"org.quartz.simpl.SimpleThreadPool"
);
prop
.
put
(
"org.quartz.threadPool.threadCount"
,
"20"
);
prop
.
put
(
"org.quartz.threadPool.threadPriority"
,
"5"
);
// JobStore配置
prop
.
put
(
"org.quartz.jobStore.class"
,
"org.quartz.impl.jdbcjobstore.JobStoreTX"
);
// 集群配置
prop
.
put
(
"org.quartz.jobStore.isClustered"
,
"true"
);
prop
.
put
(
"org.quartz.jobStore.clusterCheckinInterval"
,
"15000"
);
prop
.
put
(
"org.quartz.jobStore.maxMisfiresToHandleAtATime"
,
"1"
);
prop
.
put
(
"org.quartz.jobStore.txIsolationLevelSerializable"
,
"true"
);
prop
.
put
(
"org.quartz.jobStore.misfireThreshold"
,
"12000"
);
prop
.
put
(
"org.quartz.jobStore.tablePrefix"
,
"QRTZ_"
);
factory
.
setQuartzProperties
(
prop
);
factory
.
setSchedulerName
(
"RuoyiScheduler"
);
// 延时启动
factory
.
setStartupDelay
(
1
);
factory
.
setApplicationContextSchedulerContextKey
(
"applicationContextKey"
);
// 可选,QuartzScheduler
// 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
factory
.
setOverwriteExistingJobs
(
true
);
// 设置自动启动,默认为true
factory
.
setAutoStartup
(
true
);
return
factory
;
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/config/ShiroConfig.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.config
;
import
com.jeespring.common.filter.LogoutFilter
;
import
com.jeespring.common.filter.OnlineSessionFilter
;
import
com.jeespring.common.redis.RedisUtils
;
import
com.jeespring.common.security.shiro.session.CacheSessionDAO
;
import
com.jeespring.common.security.shiro.session.SessionManager
;
import
com.jeespring.modules.sys.dao.OnlineSessionDAO
;
import
com.jeespring.modules.sys.dao.OnlineSessionFactory
;
import
com.jeespring.modules.sys.security.FormAuthenticationFilter
;
import
com.jeespring.modules.sys.security.SystemAuthorizingRealm
;
import
net.sf.ehcache.CacheManager
;
import
org.apache.shiro.cache.ehcache.EhCacheManager
;
import
org.apache.shiro.spring.LifecycleBeanPostProcessor
;
import
org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor
;
import
org.apache.shiro.spring.web.ShiroFilterFactoryBean
;
import
org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
;
import
org.apache.shiro.web.mgt.DefaultWebSecurityManager
;
import
org.apache.shiro.web.servlet.SimpleCookie
;
import
org.crazycake.shiro.RedisCacheManager
;
import
org.crazycake.shiro.RedisManager
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.bind.RelaxedPropertyResolver
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.DependsOn
;
import
org.springframework.core.env.Environment
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.filter.DelegatingFilterProxy
;
import
com.jeespring.common.filter.SyncOnlineSessionFilter
;
import
javax.servlet.Filter
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* shiro的控制类
* 下面方法的顺序不能乱
* Created by zhao.weiwei
* create on 2017/1/11 10:59
* the email is zhao.weiwei@jyall.com.
*/
@Component
public
class
ShiroConfig
{
/**
* 日志对象
*/
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
RedisUtils
.
class
);
@Autowired
public
OnlineSessionDAO
sessionDAO
;
@Autowired
public
OnlineSessionFactory
sessionFactory
;
// Session超时时间,单位为毫秒(默认30分钟)
@Value
(
"${shiro.session.expireTime}"
)
private
int
expireTime
;
//启动shiro redis缓存,单点登录
//@Value("${shiro.redis}")
//private String shiroRedis;
// 相隔多久检查一次session的有效性,单位毫秒,默认就是10分钟
@Value
(
"${shiro.session.validationInterval}"
)
private
int
validationInterval
;
// 验证码开关
@Value
(
"${shiro.user.captchaEbabled}"
)
private
boolean
captchaEbabled
;
// 验证码类型
@Value
(
"${shiro.user.captchaType}"
)
private
String
captchaType
;
// 设置Cookie的域名
@Value
(
"${shiro.cookie.domain}"
)
private
String
domain
;
// 设置cookie的有效访问路径
@Value
(
"${shiro.cookie.path}"
)
private
String
path
;
// 设置HttpOnly属性
@Value
(
"${shiro.cookie.httpOnly}"
)
private
boolean
httpOnly
;
// 设置Cookie的过期时间,秒为单位
@Value
(
"${shiro.cookie.maxAge}"
)
private
int
maxAge
;
// 登录地址
@Value
(
"${shiro.user.loginUrl}"
)
private
String
loginUrl
=
"/admin/login"
;
// 权限认证失败地址
@Value
(
"${shiro.user.unauthorizedUrl}"
)
private
String
unauthorizedUrl
;
/**
* 全局的环境变量的设置
* shiro的拦截
*
* @param environment
* @param adminPath
* @return
*/
@Bean
(
name
=
"shiroFilterChainDefinitions"
)
public
String
shiroFilterChainDefinitions
(
Environment
environment
,
@Value
(
"${adminPath}"
)
String
adminPath
,
@Value
(
"${frontPath}"
)
String
frontPath
)
{
Global
.
resolver
=
new
RelaxedPropertyResolver
(
environment
);
StringBuilder
string
=
new
StringBuilder
();
string
.
append
(
"/static/** = anon\n"
);
string
.
append
(
"/staticViews/** = anon\n"
);
string
.
append
(
"/jeeSpringStatic/** = anon\n"
);
string
.
append
(
"/userfiles/** = anon\n"
);
string
.
append
(
"/rest/** = anon\n"
);
string
.
append
(
frontPath
+
"/** = anon\n"
);
string
.
append
(
adminPath
+
"/basic = basic\n"
);
string
.
append
(
adminPath
+
"/login = authc\n"
);
string
.
append
(
adminPath
+
"/loginBase = anon\n"
);
string
.
append
(
adminPath
+
"/logout = logout\n"
);
string
.
append
(
adminPath
+
"/register = anon\n"
);
string
.
append
(
adminPath
+
"/sys/register/registerUser = anon\n"
);
string
.
append
(
adminPath
+
"/sys/user/validateLoginName = anon\n"
);
string
.
append
(
adminPath
+
"/sys/user/validateMobile = anon\n"
);
string
.
append
(
adminPath
+
"/** = user\n"
);
string
.
append
(
"/ReportServer/** = user"
);
return
string
.
toString
();
}
@Bean
(
name
=
"basicHttpAuthenticationFilter"
)
public
BasicHttpAuthenticationFilter
casFilter
(
@Value
(
"${adminPath:/a}"
)
String
adminPath
)
{
BasicHttpAuthenticationFilter
basicHttpAuthenticationFilter
=
new
BasicHttpAuthenticationFilter
();
basicHttpAuthenticationFilter
.
setLoginUrl
(
adminPath
+
"/login"
);
return
basicHttpAuthenticationFilter
;
}
@Bean
(
name
=
"shiroFilter"
)
public
ShiroFilterFactoryBean
shiroFilterFactoryBean
(
@Value
(
"${adminPath:/a}"
)
String
adminPath
,
BasicHttpAuthenticationFilter
basicHttpAuthenticationFilter
,
FormAuthenticationFilter
formAuthenticationFilter
,
DefaultWebSecurityManager
securityManager
,
@Qualifier
(
"shiroFilterChainDefinitions"
)
String
shiroFilterChainDefinitions
)
{
Map
<
String
,
Filter
>
filters
=
new
HashMap
<>();
filters
.
put
(
"basic"
,
basicHttpAuthenticationFilter
);
filters
.
put
(
"authc"
,
formAuthenticationFilter
);
filters
.
put
(
"syncOnlineSession"
,
syncOnlineSessionFilter
());
//filters.put("onlineSession", onlineSessionFilter());
filters
.
put
(
"logout"
,
logoutFilter
());
ShiroFilterFactoryBean
bean
=
new
ShiroFilterFactoryBean
();
bean
.
setFilters
(
filters
);
bean
.
setSecurityManager
(
securityManager
);
bean
.
setLoginUrl
(
adminPath
+
"/login"
);
bean
.
setSuccessUrl
(
adminPath
+
"?login"
);
// Shiro过滤器配置
bean
.
setFilterChainDefinitions
(
shiroFilterChainDefinitions
);
return
bean
;
}
@Bean
(
name
=
"shiroCacheManager"
)
public
EhCacheManager
shiroCacheManager
(
CacheManager
manager
)
{
EhCacheManager
ehCacheManager
=
new
EhCacheManager
();
ehCacheManager
.
setCacheManager
(
manager
);
return
ehCacheManager
;
}
//@Bean(name = "redisCacheManager")
public
RedisCacheManager
redisCacheManager
(
String
redisHostName
,
String
reidsPassword
,
int
reidsPort
,
int
expireTimeShiro
)
{
RedisCacheManager
redisCacheManager
=
new
RedisCacheManager
();
RedisManager
redisManager
=
new
RedisManager
();
redisManager
.
setHost
(
redisHostName
);
redisManager
.
setPassword
(
reidsPassword
);
redisManager
.
setPort
(
reidsPort
);
redisManager
.
setExpire
(
expireTimeShiro
);
redisCacheManager
.
setRedisManager
(
redisManager
);
return
redisCacheManager
;
}
@Bean
(
name
=
"sessionManager"
)
public
SessionManager
sessionManager
(
CacheSessionDAO
dao
)
{
SessionManager
sessionManager
=
new
SessionManager
();
sessionManager
.
setSessionDAO
(
dao
);
// 设置全局session超时时间
sessionManager
.
setGlobalSessionTimeout
(
86400000
);
// 相隔多久检查一次session的有效性,单位毫秒,默认就是10分钟
sessionManager
.
setSessionValidationInterval
(
1800000
);
sessionManager
.
setSessionValidationSchedulerEnabled
(
true
);
sessionManager
.
setSessionIdCookie
(
new
SimpleCookie
(
"com.jeespring.session.id"
));
sessionManager
.
setSessionIdCookieEnabled
(
true
);
// 删除过期的session
sessionManager
.
setDeleteInvalidSessions
(
true
);
// 去掉 JSESSIONID
sessionManager
.
setSessionIdUrlRewritingEnabled
(
false
);
// 是否定时检查session
sessionManager
.
setSessionValidationSchedulerEnabled
(
true
);
// 自定义SessionDao
//sessionManager.setSessionDAO(sessionDAO());
// 自定义sessionFactory
//sessionManager.setSessionFactory(sessionFactory());
return
sessionManager
;
}
@Bean
(
name
=
"securityManager"
)
public
DefaultWebSecurityManager
defaultWebSecurityManager
(
SystemAuthorizingRealm
systemAuthorizingRealm
,
SessionManager
sessionManager
,
EhCacheManager
ehCacheManager
,
@Value
(
"${spring.redis.run}"
)
String
redisRun
,
@Value
(
"${spring.redis.hostName}"
)
String
redisHostName
,
@Value
(
"${spring.redis.password}"
)
String
reidsPassword
,
@Value
(
"${spring.redis.port}"
)
int
redisPort
,
@Value
(
"${spring.redis.expireTimeShiro}"
)
int
expireTimeShiro
,
@Value
(
"${shiro.redis}"
)
String
shiroRedis
)
{
DefaultWebSecurityManager
defaultWebSecurityManager
=
new
DefaultWebSecurityManager
();
defaultWebSecurityManager
.
setSessionManager
(
sessionManager
);
if
(
"true"
.
equals
(
redisRun
)
&&
"true"
.
equals
(
shiroRedis
)){
try
{
// 加入缓存管理器
defaultWebSecurityManager
.
setCacheManager
(
redisCacheManager
(
redisHostName
,
reidsPassword
,
redisPort
,
expireTimeShiro
));
}
catch
(
Exception
e
)
{
logger
.
error
(
"RedisUtils run:"
+
RedisUtils
.
RUN_MESSAGE
+
e
.
getMessage
(),
RedisUtils
.
RUN_MESSAGE
+
e
.
getMessage
());
defaultWebSecurityManager
.
setCacheManager
(
ehCacheManager
);
}
}
else
{
// 加入缓存管理器
defaultWebSecurityManager
.
setCacheManager
(
ehCacheManager
);
}
defaultWebSecurityManager
.
setRealm
(
systemAuthorizingRealm
);
return
defaultWebSecurityManager
;
}
@Bean
public
AuthorizationAttributeSourceAdvisor
authorizationAttributeSourceAdvisor
(
DefaultWebSecurityManager
defaultWebSecurityManager
)
{
AuthorizationAttributeSourceAdvisor
authorizationAttributeSourceAdvisor
=
new
AuthorizationAttributeSourceAdvisor
();
authorizationAttributeSourceAdvisor
.
setSecurityManager
(
defaultWebSecurityManager
);
return
authorizationAttributeSourceAdvisor
;
}
@Bean
public
FilterRegistrationBean
filterRegistrationBean
()
{
FilterRegistrationBean
filterRegistration
=
new
FilterRegistrationBean
();
filterRegistration
.
setFilter
(
new
DelegatingFilterProxy
(
"shiroFilter"
));
filterRegistration
.
addInitParameter
(
"targetFilterLifecycle"
,
"true"
);
filterRegistration
.
setEnabled
(
true
);
filterRegistration
.
addUrlPatterns
(
"/*"
);
return
filterRegistration
;
}
@Bean
(
name
=
"lifecycleBeanPostProcessor"
)
public
LifecycleBeanPostProcessor
lifecycleBeanPostProcessor
()
{
return
new
LifecycleBeanPostProcessor
();
}
@Bean
@DependsOn
(
"lifecycleBeanPostProcessor"
)
public
DefaultAdvisorAutoProxyCreator
defaultAdvisorAutoProxyCreator
()
{
DefaultAdvisorAutoProxyCreator
defaultAdvisorAutoProxyCreator
=
new
DefaultAdvisorAutoProxyCreator
();
defaultAdvisorAutoProxyCreator
.
setProxyTargetClass
(
true
);
return
defaultAdvisorAutoProxyCreator
;
}
/**
* 自定义在线用户处理过滤器
*/
public
OnlineSessionFilter
onlineSessionFilter
()
{
OnlineSessionFilter
onlineSessionFilter
=
new
OnlineSessionFilter
();
//onlineSessionFilter.setLoginUrl(loginUrl);
return
onlineSessionFilter
;
}
/**
* 自定义在线用户同步过滤器
*/
@Bean
public
SyncOnlineSessionFilter
syncOnlineSessionFilter
()
{
SyncOnlineSessionFilter
syncOnlineSessionFilter
=
new
SyncOnlineSessionFilter
();
return
syncOnlineSessionFilter
;
}
public
LogoutFilter
logoutFilter
()
{
LogoutFilter
logoutFilter
=
new
LogoutFilter
();
logoutFilter
.
setLoginUrl
(
loginUrl
);
return
logoutFilter
;
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/constant/Constants.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.constant
;
/**
* 通用常量信息
*
* @author JeeSpring
*/
public
class
Constants
{
/**
* UTF-8 字符集
*/
public
static
final
String
UTF8
=
"UTF-8"
;
/**
* 通用成功标识
*/
public
static
final
String
SUCCESS
=
"0"
;
/**
* 通用失败标识
*/
public
static
final
String
FAIL
=
"1"
;
/**
* 登录成功
*/
public
static
final
String
LOGIN_SUCCESS
=
"Success"
;
/**
* 注销
*/
public
static
final
String
LOGOUT
=
"Logout"
;
/**
* 登录失败
*/
public
static
final
String
LOGIN_FAIL
=
"Error"
;
/**
* 自动去除表前缀
*/
public
static
String
AUTO_REOMVE_PRE
=
"true"
;
/**
* 当前记录起始索引
*/
public
static
String
PAGE_NUM
=
"pageNum"
;
/**
* 每页显示记录数
*/
public
static
String
PAGE_SIZE
=
"pageSize"
;
/**
* 排序列
*/
public
static
String
ORDER_BY_COLUMN
=
"orderByColumn"
;
/**
* 排序的方向 "desc" 或者 "asc".
*/
public
static
String
IS_ASC
=
"isAsc"
;
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/constant/ScheduleConstants.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.constant
;
/**
* 任务调度通用常量
*
* @author JeeSpring
*/
public
interface
ScheduleConstants
{
public
static
final
String
TASK_CLASS_NAME
=
"__TASK_CLASS_NAME__"
;
public
static
final
String
TASK_PROPERTIES
=
"__TASK_PROPERTIES__"
;
/** 默认 */
public
static
final
String
MISFIRE_DEFAULT
=
"0"
;
/** 立即触发执行 */
public
static
final
String
MISFIRE_IGNORE_MISFIRES
=
"1"
;
/** 触发一次执行 */
public
static
final
String
MISFIRE_FIRE_AND_PROCEED
=
"2"
;
/** 不触发立即执行 */
public
static
final
String
MISFIRE_DO_NOTHING
=
"3"
;
public
enum
Status
{
/**
* 正常
*/
NORMAL
(
"0"
),
/**
* 暂停
*/
PAUSE
(
"1"
);
private
String
value
;
private
Status
(
String
value
)
{
this
.
value
=
value
;
}
public
String
getValue
()
{
return
value
;
}
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/constant/ShiroConstants.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.constant
;
/**
* Shiro通用常量
*
* @author JeeSpring
*/
public
interface
ShiroConstants
{
/**
* 当前登录的用户
*/
public
static
final
String
CURRENT_USER
=
"currentUser"
;
/**
* 用户名
*/
public
static
final
String
CURRENT_USERNAME
=
"username"
;
/**
* 消息key
*/
public
static
String
MESSAGE
=
"message"
;
/**
* 错误key
*/
public
static
String
ERROR
=
"errorMsg"
;
/**
* 编码格式
*/
public
static
String
ENCODING
=
"UTF-8"
;
/**
* 当前在线会话
*/
public
String
ONLINE_SESSION
=
"online_session"
;
/**
* 验证码key
*/
public
static
final
String
CURRENT_CAPTCHA
=
"captcha"
;
/**
* 验证码开关
*/
public
static
final
String
CURRENT_EBABLED
=
"captchaEbabled"
;
/**
* 验证码开关
*/
public
static
final
String
CURRENT_TYPE
=
"captchaType"
;
/**
* 验证码
*/
public
static
final
String
CURRENT_VALIDATECODE
=
"validateCode"
;
/**
* 验证码错误
*/
public
static
final
String
CAPTCHA_ERROR
=
"captchaError"
;
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/druid/DruidConfiguration.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.druid
;
import
java.sql.SQLException
;
import
javax.sql.DataSource
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Primary
;
import
com.alibaba.druid.pool.DruidDataSource
;
/**
*
* 描述:如果不使用代码手动初始化DataSource的话,监控界面的SQL监控会没有数据("是spring boot的bug???")
* @author chhliu
* 创建时间:2017年2月9日 下午10:33:08
* @version 1.2.0
*/
@Configuration
public
class
DruidConfiguration
{
@Value
(
"${spring.datasource.url}"
)
private
String
dbUrl
;
@Value
(
"${spring.datasource.username}"
)
private
String
username
;
@Value
(
"${spring.datasource.password}"
)
private
String
password
;
@Value
(
"${spring.datasource.driverClassName}"
)
private
String
driverClassName
;
@Value
(
"${spring.datasource.initialSize}"
)
private
int
initialSize
;
@Value
(
"${spring.datasource.minIdle}"
)
private
int
minIdle
;
@Value
(
"${spring.datasource.maxActive}"
)
private
int
maxActive
;
@Value
(
"${spring.datasource.maxWait}"
)
private
int
maxWait
;
@Value
(
"${spring.datasource.timeBetweenEvictionRunsMillis}"
)
private
int
timeBetweenEvictionRunsMillis
;
@Value
(
"${spring.datasource.minEvictableIdleTimeMillis}"
)
private
int
minEvictableIdleTimeMillis
;
@Value
(
"${spring.datasource.validationQuery}"
)
private
String
validationQuery
;
@Value
(
"${spring.datasource.testWhileIdle}"
)
private
boolean
testWhileIdle
;
@Value
(
"${spring.datasource.testOnBorrow}"
)
private
boolean
testOnBorrow
;
@Value
(
"${spring.datasource.testOnReturn}"
)
private
boolean
testOnReturn
;
@Value
(
"${spring.datasource.poolPreparedStatements}"
)
private
boolean
poolPreparedStatements
;
@Value
(
"${spring.datasource.maxPoolPreparedStatementPerConnectionSize}"
)
private
int
maxPoolPreparedStatementPerConnectionSize
;
@Value
(
"${spring.datasource.filters}"
)
private
String
filters
;
@Value
(
"${spring.datasource.connectionProperties}"
)
private
String
connectionProperties
;
@Value
(
"${spring.datasource.useGlobalDataSourceStat}"
)
private
boolean
useGlobalDataSourceStat
;
@Bean
//声明其为Bean实例
@Primary
//在同样的DataSource中,首先使用被标注的DataSource
public
DataSource
dataSource
(){
DruidDataSource
datasource
=
new
DruidDataSource
();
datasource
.
setUrl
(
this
.
dbUrl
);
datasource
.
setUsername
(
username
);
datasource
.
setPassword
(
password
);
datasource
.
setDriverClassName
(
driverClassName
);
//configuration
datasource
.
setInitialSize
(
initialSize
);
datasource
.
setMinIdle
(
minIdle
);
datasource
.
setMaxActive
(
maxActive
);
datasource
.
setMaxWait
(
maxWait
);
datasource
.
setTimeBetweenEvictionRunsMillis
(
timeBetweenEvictionRunsMillis
);
datasource
.
setMinEvictableIdleTimeMillis
(
minEvictableIdleTimeMillis
);
datasource
.
setValidationQuery
(
validationQuery
);
datasource
.
setTestWhileIdle
(
testWhileIdle
);
datasource
.
setTestOnBorrow
(
testOnBorrow
);
datasource
.
setTestOnReturn
(
testOnReturn
);
datasource
.
setPoolPreparedStatements
(
poolPreparedStatements
);
datasource
.
setMaxPoolPreparedStatementPerConnectionSize
(
maxPoolPreparedStatementPerConnectionSize
);
datasource
.
setUseGlobalDataSourceStat
(
useGlobalDataSourceStat
);
try
{
datasource
.
setFilters
(
filters
);
}
catch
(
SQLException
e
)
{
System
.
err
.
println
(
"druid configuration initialization filter: "
+
e
);
}
datasource
.
setConnectionProperties
(
connectionProperties
);
return
datasource
;
}
}
\ No newline at end of file
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/druid/DruidStatFilter.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.druid
;
import
javax.servlet.annotation.WebFilter
;
import
javax.servlet.annotation.WebInitParam
;
import
com.alibaba.druid.support.http.WebStatFilter
;
/**
* Druid的StatFilter
*
* @author 单红宇(365384722)
* @myblog http://blog.csdn.net/catoop/
* @create 2016年3月17日
*/
@WebFilter
(
filterName
=
"druidWebStatFilter"
,
urlPatterns
=
"/*"
,
initParams
={
@WebInitParam
(
name
=
"exclusions"
,
value
=
"*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
)
// 忽略资源
})
public
class
DruidStatFilter
extends
WebStatFilter
{
}
\ No newline at end of file
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/druid/DruidStatViewServlet.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.druid
;
import
javax.servlet.annotation.WebInitParam
;
import
javax.servlet.annotation.WebServlet
;
import
com.alibaba.druid.support.http.StatViewServlet
;
/**
* StatViewServlet
*
* @author 单红宇(365384722)
* @myblog http://blog.csdn.net/catoop/
* @create 2016年3月17日
*/
@SuppressWarnings
(
"serial"
)
@WebServlet
(
urlPatterns
=
"/druid/*"
,
initParams
={
@WebInitParam
(
name
=
"allow"
,
value
=
"192.168.16.110,127.0.0.1"
),
// IP白名单 (没有配置或者为空,则允许所有访问)
@WebInitParam
(
name
=
"deny"
,
value
=
"192.168.16.111"
),
// IP黑名单 (存在共同时,deny优先于allow)
//WebInitParam(name="loginUsername",value="shanhy"),// 用户名
//WebInitParam(name="loginPassword",value="shanhypwd"),// 密码
@WebInitParam
(
name
=
"resetEnable"
,
value
=
"false"
)
// 禁用HTML页面上的“Reset All”功能
})
public
class
DruidStatViewServlet
extends
StatViewServlet
{
}
\ No newline at end of file
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/exception/job/TaskException.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.exception.job
;
/**
* 计划策略异常
*
* @author JeeSpring
*/
public
class
TaskException
extends
Exception
{
private
static
final
long
serialVersionUID
=
1L
;
private
Code
code
;
public
TaskException
(
String
msg
,
Code
code
)
{
this
(
msg
,
code
,
null
);
}
public
TaskException
(
String
msg
,
Code
code
,
Exception
nestedEx
)
{
super
(
msg
,
nestedEx
);
this
.
code
=
code
;
}
public
Code
getCode
()
{
return
code
;
}
public
enum
Code
{
TASK_EXISTS
,
NO_TASK_EXISTS
,
TASK_ALREADY_STARTED
,
UNKNOWN
,
CONFIG_ERROR
,
TASK_NODE_NOT_AVAILABLE
}
}
\ No newline at end of file
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/filter/JeesiteFileUploadFilter.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.filter
;
import
com.ckfinder.connector.FileUploadFilter
;
import
javax.servlet.annotation.WebFilter
;
import
javax.servlet.annotation.WebInitParam
;
/**
* Created by zhao.weiwei
* create on 2017/1/10 12:23
* the email is zhao.weiwei@jyall.com.
*/
@WebFilter
(
urlPatterns
=
"/static/ckfinder/core/connector/java/connector.java"
,
initParams
=
{
@WebInitParam
(
name
=
"sessionCookieName"
,
value
=
"JSESSIONID"
),
@WebInitParam
(
name
=
"sessionParameterName"
,
value
=
"jsessionid"
)
})
public
class
JeesiteFileUploadFilter
extends
FileUploadFilter
{
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/filter/LogoutFilter.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.filter
;
import
com.jeespring.common.security.ShiroUtils
;
import
com.jeespring.common.utils.StringUtils
;
import
com.jeespring.modules.monitor.entity.OnlineSession
;
import
com.jeespring.modules.sys.dao.OnlineSessionDAO
;
import
com.jeespring.modules.sys.entity.SysUserOnline
;
import
com.jeespring.modules.sys.entity.User
;
import
com.jeespring.modules.sys.service.SysUserOnlineService
;
import
org.apache.shiro.session.SessionException
;
import
org.apache.shiro.subject.Subject
;
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.ApplicationContext
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.support.WebApplicationContextUtils
;
import
javax.servlet.ServletContext
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
/**
* 退出过滤器
*
* @author JeeSpring
*/
public
class
LogoutFilter
extends
org
.
apache
.
shiro
.
web
.
filter
.
authc
.
LogoutFilter
{
private
SysUserOnlineService
sysUserOnlineService
;
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
LogoutFilter
.
class
);
/**
* 退出后重定向的地址
*/
private
String
loginUrl
=
"/admin/login"
;
public
String
getLoginUrl
()
{
return
loginUrl
;
}
public
void
setLoginUrl
(
String
loginUrl
)
{
this
.
loginUrl
=
loginUrl
;
}
@Override
protected
boolean
preHandle
(
ServletRequest
request
,
ServletResponse
response
)
throws
Exception
{
try
{
Subject
subject
=
getSubject
(
request
,
response
);
String
redirectUrl
=
getRedirectUrl
(
request
,
response
,
subject
);
try
{
User
user
=
ShiroUtils
.
getUser
();
if
(
StringUtils
.
isNotNull
(
user
))
{
String
loginName
=
user
.
getLoginName
();
SysUserOnline
sysUserOnline
=
new
SysUserOnline
();
sysUserOnline
.
setLoginName
(
user
.
getName
());
if
(
sysUserOnlineService
==
null
){
ServletContext
context
=
request
.
getServletContext
();
ApplicationContext
ctx
=
WebApplicationContextUtils
.
getWebApplicationContext
(
context
);
sysUserOnlineService
=
ctx
.
getBean
(
SysUserOnlineService
.
class
);
}
if
(
sysUserOnlineService
!=
null
){
sysUserOnline
=
sysUserOnlineService
.
get
(
subject
.
getSession
().
getId
().
toString
());
if
(
sysUserOnline
!=
null
){
sysUserOnline
.
setStatus
(
OnlineSession
.
OnlineStatus
.
off_line
.
toString
());
sysUserOnlineService
.
save
(
sysUserOnline
);
}
}
// 记录用户退出日志
//SystemLogUtils.log(loginName, Constants.LOGOUT, MessageUtils.message("user.logout.success"));
}
// 退出登录
subject
.
logout
();
}
catch
(
SessionException
ise
)
{
log
.
error
(
"logout fail."
,
ise
);
}
issueRedirect
(
request
,
response
,
redirectUrl
);
}
catch
(
Exception
e
)
{
log
.
error
(
"Encountered session exception during logout. This can generally safely be ignored."
,
e
);
}
return
false
;
}
/**
* 退出跳转URL
*/
@Override
protected
String
getRedirectUrl
(
ServletRequest
request
,
ServletResponse
response
,
Subject
subject
)
{
String
url
=
getLoginUrl
();
if
(
StringUtils
.
isNotEmpty
(
url
))
{
return
url
;
}
return
super
.
getRedirectUrl
(
request
,
response
,
subject
);
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/filter/OnlineSessionFilter.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.filter
;
import
com.jeespring.common.constant.ShiroConstants
;
import
com.jeespring.common.security.ShiroUtils
;
import
com.jeespring.common.utils.IpUtils
;
import
com.jeespring.common.utils.ServletUtils
;
import
com.jeespring.modules.sys.dao.OnlineSessionDAO
;
import
com.jeespring.modules.sys.entity.User
;
import
com.jeespring.modules.sys.service.SysUserOnlineService
;
import
eu.bitwalker.useragentutils.UserAgent
;
import
org.apache.shiro.SecurityUtils
;
import
org.apache.shiro.session.Session
;
import
org.apache.shiro.subject.Subject
;
import
org.apache.shiro.web.filter.AccessControlFilter
;
import
org.apache.shiro.web.util.WebUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
com.jeespring.modules.monitor.entity.OnlineSession
;
/**
* 自定义访问控制
*
* @author JeeSpring
*/
public
class
OnlineSessionFilter
//extends AccessControlFilter
{
/**
* 强制退出后重定向的地址
*/
@Value
(
"${shiro.user.loginUrl}"
)
private
String
loginUrl
=
"/admin/login"
;
/**
* 表示是否允许访问;mappedValue就是[urls]配置中拦截器参数部分,如果允许访问返回true,否则false;
*/
//@Override
protected
boolean
isAccessAllowed
(
ServletRequest
request
,
ServletResponse
response
,
Object
mappedValue
)
throws
Exception
{
Subject
subject
=
getSubject
(
request
,
response
);
if
(
subject
==
null
||
subject
.
getSession
()
==
null
)
{
return
true
;
}
//Session session = onlineSessionDAO.readSession(subject.getSession().getId());
Session
session
=
subject
.
getSession
();
//&& session instanceof OnlineSession
if
(
session
!=
null
)
{
//OnlineSession onlineSession = (OnlineSession) session;
OnlineSession
onlineSession
=
new
OnlineSession
();
onlineSession
.
setId
(
subject
.
getSession
().
getId
().
toString
());
request
.
setAttribute
(
ShiroConstants
.
ONLINE_SESSION
,
onlineSession
);
// 把user对象设置进去
boolean
isGuest
=
onlineSession
.
getUserId
()
==
null
||
onlineSession
.
getUserId
()
==
""
;
if
(
isGuest
==
true
)
{
User
user
=
ShiroUtils
.
getUser
();
if
(
user
!=
null
)
{
onlineSession
.
setUserId
(
user
.
getId
());
onlineSession
.
setLoginName
(
user
.
getLoginName
());
if
(
user
.
getOffice
()!=
null
)
{
onlineSession
.
setDeptName
(
user
.
getOffice
().
getName
());
}
onlineSession
.
markAttributeChanged
();
UserAgent
userAgent
=
UserAgent
.
parseUserAgentString
(
ServletUtils
.
getRequest
().
getHeader
(
"User-Agent"
));
// 获取客户端操作系统
String
os
=
userAgent
.
getOperatingSystem
().
getName
();
// 获取客户端浏览器
String
browser
=
userAgent
.
getBrowser
().
getName
();
onlineSession
.
setHost
(
IpUtils
.
getIpAddr
((
HttpServletRequest
)
request
));
onlineSession
.
setBrowser
(
browser
);
onlineSession
.
setOs
(
os
);
}
}
if
(
onlineSession
.
getStatus
()
==
OnlineSession
.
OnlineStatus
.
off_line
)
{
return
false
;
}
}
return
true
;
}
/**
* 表示当访问拒绝时是否已经处理了;如果返回true表示需要继续处理;如果返回false表示该拦截器实例已经处理了,将直接返回即可。
*/
//@Override
protected
boolean
onAccessDenied
(
ServletRequest
request
,
ServletResponse
response
)
throws
Exception
{
Subject
subject
=
getSubject
(
request
,
response
);
if
(
subject
!=
null
)
{
subject
.
logout
();
}
//saveRequestAndRedirectToLogin(request, response);
return
true
;
}
// 跳转到登录页
//@Override
protected
void
redirectToLogin
(
ServletRequest
request
,
ServletResponse
response
)
throws
IOException
{
WebUtils
.
issueRedirect
(
request
,
response
,
loginUrl
);
}
/**
* 表示是否允许访问;mappedValue就是[urls]配置中拦截器参数部分,如果允许访问返回true,否则false;
*/
protected
Subject
getSubject
(
ServletRequest
request
,
ServletResponse
response
)
{
return
SecurityUtils
.
getSubject
();
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/filter/PageCachingFilter.java
0 → 100644
View file @
05beecd0
/**
* Copyright © 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
*/
package
com.jeespring.common.filter
;
import
com.jeespring.common.utils.SpringContextHolder
;
import
net.sf.ehcache.CacheManager
;
import
net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
;
/**
* 页面高速缓存过滤器
* @author 黄炳桂 516821420@qq.com
* @version 2013-8-5
*/
public
class
PageCachingFilter
extends
SimplePageCachingFilter
{
private
CacheManager
cacheManager
=
SpringContextHolder
.
getBean
(
CacheManager
.
class
);
@Override
protected
CacheManager
getCacheManager
()
{
this
.
cacheName
=
"pageCachingFilter"
;
return
cacheManager
;
}
}
JeeSpringCloud/jeespring-framework/src/main/java/com/jeespring/common/filter/SyncOnlineSessionFilter.java
0 → 100644
View file @
05beecd0
package
com.jeespring.common.filter
;
import
com.jeespring.common.constant.ShiroConstants
;
import
com.jeespring.common.redis.RedisUtils
;
import
com.jeespring.common.security.ShiroUtils
;
import
com.jeespring.common.utils.IpUtils
;
import
com.jeespring.common.utils.ServletUtils
;
import
com.jeespring.modules.monitor.entity.OnlineSession
;
import
com.jeespring.modules.sys.dao.OnlineSessionDAO
;
import
com.jeespring.modules.sys.entity.User
;
import
com.jeespring.modules.sys.service.SysUserOnlineService
;
import
eu.bitwalker.useragentutils.UserAgent
;
import
org.apache.shiro.SecurityUtils
;
import
org.apache.shiro.session.Session
;
import
org.apache.shiro.subject.Subject
;
import
org.apache.shiro.web.filter.PathMatchingFilter
;
import
org.apache.shiro.web.util.WebUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
/**
* 同步Session数据到Db
*
* @author JeeSpring
*/
public
class
SyncOnlineSessionFilter
extends
PathMatchingFilter
{
/**
* 日志对象
*/
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
SyncOnlineSessionFilter
.
class
);
@Autowired
private
SysUserOnlineService
sysUserOnlineService
;
/**
* 强制退出后重定向的地址
*/
@Value
(
"${shiro.user.loginUrl}"
)
private
String
loginUrl
;
/**
* 同步会话数据到DB 一次请求最多同步一次 防止过多处理 需要放到Shiro过滤器之前
*
* @param request
* @param response
* @return
* @throws Exception
*/
@Override
protected
boolean
preHandle
(
ServletRequest
request
,
ServletResponse
response
)
throws
Exception
{
try
{
OnlineSessionFilter
onlineSessionFilter
=
new
OnlineSessionFilter
();
onlineSessionFilter
.
isAccessAllowed
(
request
,
response
,
null
);
//isAccessAllowed(request, response);
OnlineSession
session
=
(
OnlineSession
)
request
.
getAttribute
(
ShiroConstants
.
ONLINE_SESSION
);
// 如果session stop了 也不同步
// session停止时间,如果stopTimestamp不为null,则代表已停止
if
(
session
!=
null
&&
session
.
getUserId
()
!=
null
&&
session
.
getStopTimestamp
()
==
null
)
{
sysUserOnlineService
.
syncToDb
(
session
);
}
return
true
;
}
catch
(
Exception
e
){
logger
.
error
(
"SyncOnlineSessionFilter preHandle error:"
,
e
.
getMessage
());
return
true
;
}
}
}
Prev
1
2
3
4
5
…
24
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment