Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
education
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李丛阳
education
Commits
25e879c0
Commit
25e879c0
authored
Nov 24, 2017
by
李丛阳
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
education
parent
33e7d7ee
Changes
34
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
1893 additions
and
2 deletions
+1893
-2
pom.xml
pom.xml
+2
-2
ApplicationContextHolder.java
...rg/rcisoft/common/component/ApplicationContextHolder.java
+51
-0
MvcConfig.java
src/main/java/org/rcisoft/config/MvcConfig.java
+240
-0
SecurityConfig.java
src/main/java/org/rcisoft/config/SecurityConfig.java
+99
-0
Swagger2Config.java
src/main/java/org/rcisoft/config/Swagger2Config.java
+35
-0
IdGenAspect.java
src/main/java/org/rcisoft/core/aop/IdGenAspect.java
+36
-0
JwtBean.java
src/main/java/org/rcisoft/core/bean/JwtBean.java
+46
-0
DruidAutoConfiguration.java
...n/java/org/rcisoft/core/druid/DruidAutoConfiguration.java
+53
-0
DruidProperties.java
src/main/java/org/rcisoft/core/druid/DruidProperties.java
+87
-0
DruidStatFilter.java
src/main/java/org/rcisoft/core/druid/DruidStatFilter.java
+18
-0
DruidStatViewServlet.java
...ain/java/org/rcisoft/core/druid/DruidStatViewServlet.java
+22
-0
DataEntity.java
src/main/java/org/rcisoft/core/entity/DataEntity.java
+74
-0
IdEntity.java
src/main/java/org/rcisoft/core/entity/IdEntity.java
+44
-0
ServiceException.java
...ain/java/org/rcisoft/core/exception/ServiceException.java
+34
-0
JwtUser.java
src/main/java/org/rcisoft/core/model/JwtUser.java
+73
-0
PageInfo.java
src/main/java/org/rcisoft/core/model/PageInfo.java
+333
-0
PersistModel.java
src/main/java/org/rcisoft/core/model/PersistModel.java
+40
-0
AuthExceptionEnum.java
src/main/java/org/rcisoft/core/result/AuthExceptionEnum.java
+23
-0
Result.java
src/main/java/org/rcisoft/core/result/Result.java
+57
-0
ResultCode.java
src/main/java/org/rcisoft/core/result/ResultCode.java
+18
-0
ResultExceptionEnum.java
...ain/java/org/rcisoft/core/result/ResultExceptionEnum.java
+28
-0
JwtAuthenTokenFilter.java
.../java/org/rcisoft/core/security/JwtAuthenTokenFilter.java
+69
-0
RestAuthenticationEntryPoint.java
...g/rcisoft/core/security/RestAuthenticationEntryPoint.java
+33
-0
IdGen.java
src/main/java/org/rcisoft/core/util/IdGen.java
+24
-0
JwtUserFactory.java
src/main/java/org/rcisoft/core/util/JwtUserFactory.java
+41
-0
JwtUtil.java
src/main/java/org/rcisoft/core/util/JwtUtil.java
+73
-0
ResultGenerator.java
src/main/java/org/rcisoft/core/util/ResultGenerator.java
+31
-0
SysController.java
src/main/java/org/rcisoft/sys/controller/SysController.java
+44
-0
AjaxResponse.java
src/main/java/org/rcisoft/sys/model/AjaxResponse.java
+56
-0
UserController.java
.../java/org/rcisoft/sys/user/controller/UserController.java
+30
-0
SysUserMapper.java
src/main/java/org/rcisoft/sys/user/dao/SysUserMapper.java
+14
-0
SysUser.java
src/main/java/org/rcisoft/sys/user/entity/SysUser.java
+30
-0
UserService.java
src/main/java/org/rcisoft/sys/user/service/UserService.java
+11
-0
UserServiceImpl.java
...va/org/rcisoft/sys/user/service/impl/UserServiceImpl.java
+24
-0
No files found.
pom.xml
View file @
25e879c0
...
...
@@ -304,10 +304,10 @@
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<
!--<
configuration>
<configuration>
<source>
1.8
</source>
<target>
1.8
</target>
</configuration>
-->
</configuration>
</plugin>
</plugins>
</build>
...
...
src/main/java/org/rcisoft/common/component/ApplicationContextHolder.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
common
.
component
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Component
;
/**
* Created by lcy on 17/11/23.
*/
@Component
public
class
ApplicationContextHolder
implements
ApplicationContextAware
{
private
static
ApplicationContext
applicationContext
;
//@Override
public
void
setApplicationContext
(
ApplicationContext
ctx
)
throws
BeansException
{
applicationContext
=
ctx
;
}
/**
* Get application context from everywhere
*
* @return
*/
public
static
ApplicationContext
getApplicationContext
()
{
return
applicationContext
;
}
/**
* Get bean by class
*
* @param clazz
* @param <T>
* @return
*/
public
static
<
T
>
T
getBean
(
Class
<
T
>
clazz
)
{
return
applicationContext
.
getBean
(
clazz
);
}
/**
* Get bean by class name
*
* @param name
* @param <T>
* @return
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
T
getBean
(
String
name
)
{
return
(
T
)
applicationContext
.
getBean
(
name
);
}
}
src/main/java/org/rcisoft/config/MvcConfig.java
0 → 100644
View file @
25e879c0
This diff is collapsed.
Click to expand it.
src/main/java/org/rcisoft/config/SecurityConfig.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
config
;
import
org.rcisoft.core.bean.JwtBean
;
import
org.rcisoft.core.security.JwtAuthenTokenFilter
;
import
org.rcisoft.core.security.RestAuthenticationEntryPoint
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
;
import
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
;
import
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
;
import
org.springframework.security.config.http.SessionCreationPolicy
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
import
org.springframework.security.crypto.password.PasswordEncoder
;
import
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
;
/**
* Created by lcy on 17/11/23.
*/
@Configuration
@EnableWebSecurity
//开启WebSecurity支持
@EnableGlobalMethodSecurity
(
prePostEnabled
=
true
)
//开启prePostEnabled注解支持
public
class
SecurityConfig
extends
WebSecurityConfigurerAdapter
{
@Autowired
private
UserDetailsService
jwtUserDetailServiceImpl
;
@Override
protected
void
configure
(
AuthenticationManagerBuilder
auth
)
throws
Exception
{
auth
.
userDetailsService
(
jwtUserDetailServiceImpl
)
.
passwordEncoder
(
passwordEncoder
());
}
/**
* 密码加密的bean,使用BCrypt
* @return
*/
@Bean
public
PasswordEncoder
passwordEncoder
()
{
return
new
BCryptPasswordEncoder
();
}
/**
* json web token
* @return
*/
@Bean
JwtBean
jwtBean
(){
return
new
JwtBean
();
}
/**
* 前置过滤器
* @return
*/
@Bean
JwtAuthenTokenFilter
authenticationTokenFilterBean
(){
return
new
JwtAuthenTokenFilter
();
}
@Override
protected
void
configure
(
HttpSecurity
http
)
throws
Exception
{
http
.
csrf
()
.
disable
()
//由于使用的是JWT,我们这里不需要csrf
.
sessionManagement
().
sessionCreationPolicy
(
SessionCreationPolicy
.
STATELESS
)
//禁用session
.
and
()
.
authorizeRequests
()
//所有请求都要验证
.
antMatchers
(
"/static/**"
).
permitAll
()
//过滤 允许
.
antMatchers
(
"/webjars/**"
).
permitAll
()
.
antMatchers
(
"/v2/**"
).
permitAll
()
.
antMatchers
(
"/swagger-resources/**"
).
permitAll
()
.
antMatchers
(
"/swagger-resources/**"
).
permitAll
()
.
antMatchers
(
"/auth/**"
).
permitAll
()
//登录注册等请求过滤
.
antMatchers
(
"/code/**"
).
permitAll
()
//登录注册等请求过滤
.
antMatchers
(
"/"
,
"/*.html"
,
"/favicon.ico"
,
"/**/*.html"
,
"/**/*.js"
,
"/**/*.css"
).
permitAll
()
//静态资源过滤
.
anyRequest
().
fullyAuthenticated
()
.
and
()
.
exceptionHandling
()
//验证不通过的配置
.
authenticationEntryPoint
(
new
RestAuthenticationEntryPoint
())
;
http
//添加前置过滤器
.
addFilterBefore
(
authenticationTokenFilterBean
(),
UsernamePasswordAuthenticationFilter
.
class
);
http
//禁用header缓存
.
headers
().
cacheControl
();
}
}
src/main/java/org/rcisoft/config/Swagger2Config.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
/**
* Created by lcy on 17/11/24.
*/
@Configuration
public
class
Swagger2Config
{
@Bean
public
Docket
createRestApi
()
{
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
())
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"org.yxyqcy"
))
.
paths
(
PathSelectors
.
any
())
.
build
();
}
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"springboot利用swagger构建api文档"
)
.
description
(
"简单优雅的restfun风格,http://blog.csdn.net/saytime"
)
.
termsOfServiceUrl
(
"http://blog.csdn.net/saytime"
)
.
version
(
"1.0"
)
.
build
();
}
}
src/main/java/org/rcisoft/core/aop/IdGenAspect.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
aop
;
import
org.apache.commons.lang3.StringUtils
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Before
;
import
org.rcisoft.core.entity.IdEntity
;
import
org.rcisoft.core.util.IdGen
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
/**
* Created by lcy on 17/11/23.
*/
@Aspect
@Component
public
class
IdGenAspect
{
/**
* 插入前 判断是否 存在id
* @param joinPoint
*/
@Before
(
"execution(* org.yxyqcy..*.dao.*Mapper.insert*(..))"
)
public
void
beforeInsert
(
JoinPoint
joinPoint
){
Object
model
=
joinPoint
.
getArgs
()[
0
];
if
(
model
instanceof
IdEntity
)
{
IdEntity
idEntity
=
(
IdEntity
)
model
;
/*id null*/
if
(
StringUtils
.
isBlank
(
idEntity
.
getBusinessId
()))
idEntity
.
setBusinessId
(
IdGen
.
uuid
());
/*create date is null*/
if
(
null
==
idEntity
.
getCreateDate
())
idEntity
.
setCreateDate
(
new
Date
());
}
}
}
src/main/java/org/rcisoft/core/bean/JwtBean.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
bean
;
import
io.jsonwebtoken.Claims
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.SignatureAlgorithm
;
import
org.springframework.beans.factory.annotation.Value
;
import
java.util.Date
;
import
java.util.Map
;
/**
* Created by lcy on 17/11/21.
*/
public
class
JwtBean
{
@Value
(
"${jwt.secret}"
)
private
String
secret
;
/**
* 根据token获取用户信息
*/
public
Claims
getClaimsFromToken
(
String
token
){
try
{
Claims
claims
=
Jwts
.
parser
()
.
setSigningKey
(
secret
)
.
parseClaimsJws
(
token
).
getBody
();
return
claims
;
}
catch
(
Exception
e
){
return
null
;
}
}
/**
* 设置用户信息进jwt
*/
public
String
generateToken
(
String
subject
,
Map
<
String
,
Object
>
map
){
String
token
=
Jwts
.
builder
()
.
setClaims
(
map
)
.
setSubject
(
subject
)
.
setIssuedAt
(
new
Date
())
.
signWith
(
SignatureAlgorithm
.
HS256
,
secret
)
.
compact
();
return
token
;
}
}
src/main/java/org/rcisoft/core/druid/DruidAutoConfiguration.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
druid
;
import
com.alibaba.druid.pool.DruidDataSource
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.AutoConfigureBefore
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
javax.sql.DataSource
;
import
java.sql.SQLException
;
/**
* @author liuzh
* @since 2017/2/5.
*/
@Configuration
@EnableConfigurationProperties
(
DruidProperties
.
class
)
@ConditionalOnClass
(
DruidDataSource
.
class
)
@ConditionalOnProperty
(
prefix
=
"druid"
,
name
=
"username"
)
//name 随便 druid 下有对应属性即可
@AutoConfigureBefore
(
DataSourceAutoConfiguration
.
class
)
public
class
DruidAutoConfiguration
{
@Autowired
private
DruidProperties
properties
;
@Bean
public
DataSource
dataSource
()
{
DruidDataSource
dataSource
=
new
DruidDataSource
();
dataSource
.
setUrl
(
properties
.
getUrl
());
dataSource
.
setUsername
(
properties
.
getUsername
());
dataSource
.
setPassword
(
properties
.
getPassword
());
if
(
properties
.
getInitialSize
()
>
0
)
{
dataSource
.
setInitialSize
(
properties
.
getInitialSize
());
}
if
(
properties
.
getMinIdle
()
>
0
)
{
dataSource
.
setMinIdle
(
properties
.
getMinIdle
());
}
if
(
properties
.
getMaxActive
()
>
0
)
{
dataSource
.
setMaxActive
(
properties
.
getMaxActive
());
}
dataSource
.
setTestOnBorrow
(
properties
.
isTestOnBorrow
());
try
{
dataSource
.
init
();
}
catch
(
SQLException
e
)
{
throw
new
RuntimeException
(
e
);
}
return
dataSource
;
}
}
src/main/java/org/rcisoft/core/druid/DruidProperties.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
druid
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
/**
* 只提供了常用的属性,如果有需要,自己添加
*
* @author liuzh
* @since 2017/2/5.
*/
@ConfigurationProperties
(
prefix
=
"druid"
)
public
class
DruidProperties
{
private
String
url
;
private
String
username
;
private
String
password
;
private
String
driverClass
;
private
int
maxActive
;
private
int
minIdle
;
private
int
initialSize
;
private
boolean
testOnBorrow
;
public
String
getUrl
()
{
return
url
;
}
public
void
setUrl
(
String
url
)
{
this
.
url
=
url
;
}
public
String
getUsername
()
{
return
username
;
}
public
void
setUsername
(
String
username
)
{
this
.
username
=
username
;
}
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
String
getDriverClass
()
{
return
driverClass
;
}
public
void
setDriverClass
(
String
driverClass
)
{
this
.
driverClass
=
driverClass
;
}
public
int
getMaxActive
()
{
return
maxActive
;
}
public
void
setMaxActive
(
int
maxActive
)
{
this
.
maxActive
=
maxActive
;
}
public
int
getMinIdle
()
{
return
minIdle
;
}
public
void
setMinIdle
(
int
minIdle
)
{
this
.
minIdle
=
minIdle
;
}
public
int
getInitialSize
()
{
return
initialSize
;
}
public
void
setInitialSize
(
int
initialSize
)
{
this
.
initialSize
=
initialSize
;
}
public
boolean
isTestOnBorrow
()
{
return
testOnBorrow
;
}
public
void
setTestOnBorrow
(
boolean
testOnBorrow
)
{
this
.
testOnBorrow
=
testOnBorrow
;
}
}
src/main/java/org/rcisoft/core/druid/DruidStatFilter.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
druid
;
import
com.alibaba.druid.support.http.WebStatFilter
;
import
javax.servlet.annotation.WebFilter
;
import
javax.servlet.annotation.WebInitParam
;
/**
* Created by lcy on 17/11/23.
*/
@WebFilter
(
filterName
=
"druidWebStatFilter"
,
urlPatterns
=
"/*"
,
initParams
={
@WebInitParam
(
name
=
"exclusions"
,
value
=
"*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
)
// 忽略资源
})
public
class
DruidStatFilter
extends
WebStatFilter
{
}
src/main/java/org/rcisoft/core/druid/DruidStatViewServlet.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
druid
;
import
com.alibaba.druid.support.http.StatViewServlet
;
import
javax.servlet.annotation.WebInitParam
;
import
javax.servlet.annotation.WebServlet
;
/**
* Created by lcy on 17/11/23.
*/
@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
=
"cy"
),
// 用户名
@WebInitParam
(
name
=
"loginPassword"
,
value
=
"pass"
),
// 密码
@WebInitParam
(
name
=
"resetEnable"
,
value
=
"false"
)
// 禁用HTML页面上的“Reset All”功能
})
public
class
DruidStatViewServlet
extends
StatViewServlet
{
}
src/main/java/org/rcisoft/core/entity/DataEntity.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.rcisoft.core.anno.OperateFlagAnno
;
import
org.rcisoft.core.constant.DelStatus
;
import
org.rcisoft.core.constant.FlagStatus
;
import
javax.persistence.MappedSuperclass
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* Created with family.
* author: cy
* Date: 16/6/23
* Time: 上午10:04
* description: data 实体 常用属性
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@MappedSuperclass
public
abstract
class
DataEntity
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
protected
String
remarks
;
// 备注
protected
String
createBy
;
// 创建者
protected
Date
createDate
;
// 创建日期
@OperateFlagAnno
protected
String
updateBy
;
// 更新者
@OperateFlagAnno
(
jdbcTypeName
=
"TIMESTAMP"
)
protected
Date
updateDate
;
// 更新日期
@OperateFlagAnno
protected
String
delFlag
;
// 删除标记(0:正常;1:删除;2:审核)
@OperateFlagAnno
protected
String
flag
;
// 启用标记(0:停用;1:启用)
/**
* 设置删除
*/
public
void
setDeleted
(){
this
.
setDelFlag
(
DelStatus
.
DELETED
.
getStatus
());
}
/**
* 设置非删除
*/
public
void
setNotDeleted
(){
this
.
setDelFlag
(
DelStatus
.
NORMAL
.
getStatus
());
}
/**
* 设置启用
*/
public
void
setStart
(){
this
.
setDelFlag
(
FlagStatus
.
NORMAL
.
getStatus
());
}
/**
* 设置停用
*/
public
void
setStop
(){
this
.
setDelFlag
(
FlagStatus
.
ABNORMAL
.
getStatus
());
}
}
src/main/java/org/rcisoft/core/entity/IdEntity.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.rcisoft.core.util.IdGen
;
import
javax.persistence.Id
;
import
javax.persistence.MappedSuperclass
;
import
java.io.Serializable
;
/**
* Created with family.
* author: cy
* Date: 16/6/2
* Time: 上午9:15
* description: id entity
*/
@NoArgsConstructor
@AllArgsConstructor
@MappedSuperclass
@Data
public
abstract
class
IdEntity
<
T
>
extends
DataEntity
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Id
protected
String
businessId
;
// 编号
public
void
setBusinessId
(
String
businessId
)
{
this
.
businessId
=
businessId
;
}
/**
* 通用设置ID
*/
public
void
setCommonBusinessId
(){
this
.
setBusinessId
(
IdGen
.
uuid
());
}
}
\ No newline at end of file
src/main/java/org/rcisoft/core/exception/ServiceException.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
exception
;
import
org.rcisoft.core.result.ResultExceptionEnum
;
/**
* Created by lcy on 17/11/24.
*/
public
class
ServiceException
extends
RuntimeException
{
private
static
final
long
serialVersionUID
=
3729706443523052156L
;
Integer
code
;
public
ServiceException
()
{
}
public
ServiceException
(
ResultExceptionEnum
resultEnum
){
super
(
resultEnum
.
getMessage
());
code
=
resultEnum
.
getCode
();
}
public
ServiceException
(
String
message
)
{
super
(
message
);
}
public
ServiceException
(
String
message
,
Throwable
cause
)
{
super
(
message
,
cause
);
}
public
ServiceException
(
Integer
code
,
String
message
)
{
super
(
message
);
this
.
code
=
code
;
}
}
src/main/java/org/rcisoft/core/model/JwtUser.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
model
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.Data
;
import
org.springframework.security.core.GrantedAuthority
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
java.util.Collection
;
/**
* Created by lcy on 17/11/21.
*/
@Data
public
class
JwtUser
implements
UserDetails
{
private
static
final
long
serialVersionUID
=
-
4070913768662945949L
;
private
final
String
businessId
;
private
final
String
username
;
private
final
String
password
;
/** 权限类.*/
private
final
Collection
<?
extends
GrantedAuthority
>
authorities
;
/**
* 在createJwtFactory里注入
*/
public
JwtUser
(
String
id
,
String
username
,
String
password
,
Collection
<?
extends
GrantedAuthority
>
authorities
)
{
this
.
businessId
=
id
;
this
.
username
=
username
;
this
.
password
=
password
;
this
.
authorities
=
authorities
;
}
@Override
public
Collection
<?
extends
GrantedAuthority
>
getAuthorities
()
{
return
authorities
;
}
@Override
@JsonIgnore
public
String
getPassword
()
{
return
password
;
}
@Override
public
String
getUsername
()
{
return
username
;
}
@JsonIgnore
public
boolean
isAccountNonExpired
()
{
return
true
;
}
@JsonIgnore
public
boolean
isAccountNonLocked
()
{
return
true
;
}
@JsonIgnore
public
boolean
isCredentialsNonExpired
()
{
return
true
;
}
@JsonIgnore
public
boolean
isEnabled
()
{
return
true
;
}
}
src/main/java/org/rcisoft/core/model/PageInfo.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
model
;
import
com.github.pagehelper.Page
;
import
java.io.Serializable
;
import
java.util.Collection
;
import
java.util.List
;
/**
* @descript 分页信息
* @author cy
* Created by cy on 16/5/20.
*/
public
class
PageInfo
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
3480714604668028816L
;
private
int
pageNum
;
private
int
pageSize
;
private
int
size
;
private
String
orderBy
;
private
int
startRow
;
private
int
endRow
;
private
long
total
;
private
int
pages
;
private
List
<
T
>
list
;
private
int
firstPage
;
private
int
prePage
;
private
int
nextPage
;
private
int
lastPage
;
private
boolean
isFirstPage
;
private
boolean
isLastPage
;
private
boolean
hasPreviousPage
;
private
boolean
hasNextPage
;
private
int
navigatePages
;
private
int
[]
navigatepageNums
;
public
PageInfo
()
{
this
.
isFirstPage
=
false
;
this
.
isLastPage
=
false
;
this
.
hasPreviousPage
=
false
;
this
.
hasNextPage
=
false
;
}
public
PageInfo
(
List
<
T
>
list
)
{
this
(
list
,
8
);
}
public
PageInfo
(
List
<
T
>
list
,
int
navigatePages
)
{
this
.
isFirstPage
=
false
;
this
.
isLastPage
=
false
;
this
.
hasPreviousPage
=
false
;
this
.
hasNextPage
=
false
;
if
(
list
instanceof
Page
)
{
Page
page
=
(
Page
)
list
;
this
.
pageNum
=
page
.
getPageNum
();
this
.
pageSize
=
page
.
getPageSize
();
//this.orderBy = page.get();
this
.
pages
=
page
.
getPages
();
this
.
list
=
page
;
this
.
size
=
page
.
size
();
this
.
total
=
page
.
getTotal
();
if
(
this
.
size
==
0
)
{
this
.
startRow
=
0
;
this
.
endRow
=
0
;
}
else
{
this
.
startRow
=
page
.
getStartRow
()
+
1
;
this
.
endRow
=
this
.
startRow
-
1
+
this
.
size
;
}
}
else
if
(
list
instanceof
Collection
)
{
this
.
pageNum
=
1
;
this
.
pageSize
=
list
.
size
();
this
.
pages
=
1
;
this
.
list
=
list
;
this
.
size
=
list
.
size
();
this
.
total
=
(
long
)
list
.
size
();
this
.
startRow
=
0
;
this
.
endRow
=
list
.
size
()
>
0
?
list
.
size
()
-
1
:
0
;
}
if
(
list
instanceof
Collection
)
{
this
.
navigatePages
=
navigatePages
;
this
.
calcNavigatepageNums
();
this
.
calcPage
();
this
.
judgePageBoudary
();
}
}
private
void
calcNavigatepageNums
()
{
int
startNum
;
if
(
this
.
pages
<=
this
.
navigatePages
)
{
this
.
navigatepageNums
=
new
int
[
this
.
pages
];
for
(
startNum
=
0
;
startNum
<
this
.
pages
;
++
startNum
)
{
this
.
navigatepageNums
[
startNum
]
=
startNum
+
1
;
}
}
else
{
this
.
navigatepageNums
=
new
int
[
this
.
navigatePages
];
startNum
=
this
.
pageNum
-
this
.
navigatePages
/
2
;
int
endNum
=
this
.
pageNum
+
this
.
navigatePages
/
2
;
int
i
;
if
(
startNum
<
1
)
{
startNum
=
1
;
for
(
i
=
0
;
i
<
this
.
navigatePages
;
++
i
)
{
this
.
navigatepageNums
[
i
]
=
startNum
++;
}
}
else
if
(
endNum
>
this
.
pages
)
{
endNum
=
this
.
pages
;
for
(
i
=
this
.
navigatePages
-
1
;
i
>=
0
;
--
i
)
{
this
.
navigatepageNums
[
i
]
=
endNum
--;
}
}
else
{
for
(
i
=
0
;
i
<
this
.
navigatePages
;
++
i
)
{
this
.
navigatepageNums
[
i
]
=
startNum
++;
}
}
}
}
private
void
calcPage
()
{
if
(
this
.
navigatepageNums
!=
null
&&
this
.
navigatepageNums
.
length
>
0
)
{
this
.
firstPage
=
this
.
navigatepageNums
[
0
];
this
.
lastPage
=
this
.
navigatepageNums
[
this
.
navigatepageNums
.
length
-
1
];
if
(
this
.
pageNum
>
1
)
{
this
.
prePage
=
this
.
pageNum
-
1
;
}
if
(
this
.
pageNum
<
this
.
pages
)
{
this
.
nextPage
=
this
.
pageNum
+
1
;
}
}
}
private
void
judgePageBoudary
()
{
this
.
isFirstPage
=
this
.
pageNum
==
1
;
this
.
isLastPage
=
this
.
pageNum
==
this
.
pages
;
this
.
hasPreviousPage
=
this
.
pageNum
>
1
;
this
.
hasNextPage
=
this
.
pageNum
<
this
.
pages
;
}
public
int
getPageNum
()
{
return
this
.
pageNum
;
}
public
void
setPageNum
(
int
pageNum
)
{
this
.
pageNum
=
pageNum
;
}
public
int
getPageSize
()
{
return
this
.
pageSize
;
}
public
void
setPageSize
(
int
pageSize
)
{
this
.
pageSize
=
pageSize
;
}
public
int
getSize
()
{
return
this
.
size
;
}
public
void
setSize
(
int
size
)
{
this
.
size
=
size
;
}
public
String
getOrderBy
()
{
return
this
.
orderBy
;
}
public
void
setOrderBy
(
String
orderBy
)
{
this
.
orderBy
=
orderBy
;
}
public
int
getStartRow
()
{
return
this
.
startRow
;
}
public
void
setStartRow
(
int
startRow
)
{
this
.
startRow
=
startRow
;
}
public
int
getEndRow
()
{
return
this
.
endRow
;
}
public
void
setEndRow
(
int
endRow
)
{
this
.
endRow
=
endRow
;
}
public
long
getTotal
()
{
return
this
.
total
;
}
public
void
setTotal
(
long
total
)
{
this
.
total
=
total
;
}
public
int
getPages
()
{
return
this
.
pages
;
}
public
void
setPages
(
int
pages
)
{
this
.
pages
=
pages
;
}
public
List
<
T
>
getList
()
{
return
this
.
list
;
}
public
void
setList
(
List
<
T
>
list
)
{
this
.
list
=
list
;
}
public
int
getFirstPage
()
{
return
this
.
firstPage
;
}
public
void
setFirstPage
(
int
firstPage
)
{
this
.
firstPage
=
firstPage
;
}
public
int
getPrePage
()
{
return
this
.
prePage
;
}
public
void
setPrePage
(
int
prePage
)
{
this
.
prePage
=
prePage
;
}
public
int
getNextPage
()
{
return
this
.
nextPage
;
}
public
void
setNextPage
(
int
nextPage
)
{
this
.
nextPage
=
nextPage
;
}
public
int
getLastPage
()
{
return
this
.
lastPage
;
}
public
void
setLastPage
(
int
lastPage
)
{
this
.
lastPage
=
lastPage
;
}
public
boolean
isIsFirstPage
()
{
return
this
.
isFirstPage
;
}
public
void
setIsFirstPage
(
boolean
isFirstPage
)
{
this
.
isFirstPage
=
isFirstPage
;
}
public
boolean
isIsLastPage
()
{
return
this
.
isLastPage
;
}
public
void
setIsLastPage
(
boolean
isLastPage
)
{
this
.
isLastPage
=
isLastPage
;
}
public
boolean
isHasPreviousPage
()
{
return
this
.
hasPreviousPage
;
}
public
void
setHasPreviousPage
(
boolean
hasPreviousPage
)
{
this
.
hasPreviousPage
=
hasPreviousPage
;
}
public
boolean
isHasNextPage
()
{
return
this
.
hasNextPage
;
}
public
void
setHasNextPage
(
boolean
hasNextPage
)
{
this
.
hasNextPage
=
hasNextPage
;
}
public
int
getNavigatePages
()
{
return
this
.
navigatePages
;
}
public
void
setNavigatePages
(
int
navigatePages
)
{
this
.
navigatePages
=
navigatePages
;
}
public
int
[]
getNavigatepageNums
()
{
return
this
.
navigatepageNums
;
}
public
void
setNavigatepageNums
(
int
[]
navigatepageNums
)
{
this
.
navigatepageNums
=
navigatepageNums
;
}
public
String
toString
()
{
StringBuffer
sb
=
new
StringBuffer
(
"PageInfo{"
);
sb
.
append
(
"pageNum="
).
append
(
this
.
pageNum
);
sb
.
append
(
", pageSize="
).
append
(
this
.
pageSize
);
sb
.
append
(
", size="
).
append
(
this
.
size
);
sb
.
append
(
", startRow="
).
append
(
this
.
startRow
);
sb
.
append
(
", endRow="
).
append
(
this
.
endRow
);
sb
.
append
(
", total="
).
append
(
this
.
total
);
sb
.
append
(
", pages="
).
append
(
this
.
pages
);
sb
.
append
(
", list="
).
append
(
this
.
list
);
sb
.
append
(
", firstPage="
).
append
(
this
.
firstPage
);
sb
.
append
(
", prePage="
).
append
(
this
.
prePage
);
sb
.
append
(
", nextPage="
).
append
(
this
.
nextPage
);
sb
.
append
(
", lastPage="
).
append
(
this
.
lastPage
);
sb
.
append
(
", isFirstPage="
).
append
(
this
.
isFirstPage
);
sb
.
append
(
", isLastPage="
).
append
(
this
.
isLastPage
);
sb
.
append
(
", hasPreviousPage="
).
append
(
this
.
hasPreviousPage
);
sb
.
append
(
", hasNextPage="
).
append
(
this
.
hasNextPage
);
sb
.
append
(
", navigatePages="
).
append
(
this
.
navigatePages
);
sb
.
append
(
", navigatepageNums="
);
if
(
this
.
navigatepageNums
==
null
)
{
sb
.
append
(
"null"
);
}
else
{
sb
.
append
(
'['
);
for
(
int
i
=
0
;
i
<
this
.
navigatepageNums
.
length
;
++
i
)
{
sb
.
append
(
i
==
0
?
""
:
", "
).
append
(
this
.
navigatepageNums
[
i
]);
}
sb
.
append
(
']'
);
}
sb
.
append
(
'}'
);
return
sb
.
toString
();
}
}
\ No newline at end of file
src/main/java/org/rcisoft/core/model/PersistModel.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
model
;
/**
* Created with family.
* author: cy
* Date: 16/6/22
* Time: 上午9:13
* description:
*/
public
class
PersistModel
{
public
PersistModel
(
int
influence
)
{
this
.
influence
=
influence
;
}
private
int
influence
;
private
String
influenceReason
=
""
;
public
String
getInfluenceReason
()
{
return
influenceReason
;
}
public
PersistModel
(
int
influence
,
String
influenceReason
)
{
this
.
influence
=
influence
;
this
.
influenceReason
=
influenceReason
;
}
/**
* 单一插入是否成功
* @return 是否成功
*/
public
boolean
isSuccessBySinglePersist
(){
if
(
1
<=
influence
)
return
true
;
return
false
;
}
}
src/main/java/org/rcisoft/core/result/AuthExceptionEnum.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
result
;
import
lombok.Getter
;
/**
* Created by lcy on 17/11/24.
*/
@Getter
public
enum
AuthExceptionEnum
{
ACCESS_DENIED
(
4031
,
"权限不足"
),
LOGIN_PARAM_ERROR
(
4302
,
"用户名密码错误"
),
AUTH_HEADER_ERROR
(
4304
,
"不合法的token验证"
),
;
private
Integer
code
;
private
String
message
;
AuthExceptionEnum
(
Integer
code
,
String
message
)
{
this
.
code
=
code
;
this
.
message
=
message
;
}
}
src/main/java/org/rcisoft/core/result/Result.java
0 → 100755
View file @
25e879c0
package
org
.
rcisoft
.
core
.
result
;
import
com.alibaba.fastjson.JSON
;
import
com.fasterxml.jackson.annotation.JsonView
;
/**
* 统一API响应结果封装
*/
public
class
Result
{
private
int
code
;
private
String
message
;
private
Object
data
;
public
interface
DefulatJsonView
{}
public
Result
setCode
(
ResultCode
resultCode
)
{
this
.
code
=
resultCode
.
code
;
return
this
;
}
@JsonView
(
DefulatJsonView
.
class
)
public
int
getCode
()
{
return
code
;
}
public
Result
setCode
(
int
code
)
{
this
.
code
=
code
;
return
this
;
}
@JsonView
(
DefulatJsonView
.
class
)
public
String
getMessage
()
{
return
message
;
}
public
Result
setMessage
(
String
message
)
{
this
.
message
=
message
;
return
this
;
}
@JsonView
(
DefulatJsonView
.
class
)
public
Object
getData
()
{
return
data
;
}
public
Result
setData
(
Object
data
)
{
this
.
data
=
data
;
return
this
;
}
@Override
public
String
toString
()
{
return
JSON
.
toJSONString
(
this
);
}
}
src/main/java/org/rcisoft/core/result/ResultCode.java
0 → 100755
View file @
25e879c0
package
org
.
rcisoft
.
core
.
result
;
/**
* 响应码枚举,参考HTTP状态码的语义
*/
public
enum
ResultCode
{
SUCCESS
(
200
),
//成功
FAIL
(
400
),
//失败
UNAUTHORIZED
(
401
),
//未认证(签名错误)
NOT_FOUND
(
404
),
//接口不存在
INTERNAL_SERVER_ERROR
(
500
);
//服务器内部错误
public
int
code
;
ResultCode
(
int
code
)
{
this
.
code
=
code
;
}
}
src/main/java/org/rcisoft/core/result/ResultExceptionEnum.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
result
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
/**
* Created by lcy on 17/11/24.
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public
enum
ResultExceptionEnum
{
USER_EXISTS
(
4001
,
"用户已经存在"
),
USER_NOT_EXISTS
(
4002
,
"用户不存在"
),
SAVE_ERROR
(
4003
,
"添加失败"
),
PARAM_ERROR
(
4004
,
"参数错误"
),
OS_NOT_FOUND
(
4005
,
"操作系统不存在"
),
SERVER_NOT_FOUND
(
4006
,
"服务器不存在"
),
SERVER_HAS_APP
(
4007
,
"服务器仍有关联应用,不可删除"
),
OS_HAS_SERVER
(
4008
,
"操作系统仍有关联服务器,不可删除"
),
;
private
Integer
code
;
private
String
message
;
}
src/main/java/org/rcisoft/core/security/JwtAuthenTokenFilter.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
security
;
import
lombok.extern.slf4j.Slf4j
;
import
org.rcisoft.core.util.JwtUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.web.authentication.WebAuthenticationDetailsSource
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* Created by lcy on 17/11/21.
*/
@Slf4j
public
class
JwtAuthenTokenFilter
extends
OncePerRequestFilter
{
@Value
(
"${jwt.header}"
)
private
String
tokenHeader
;
@Value
(
"${jwt.tokenHead}"
)
private
String
tokenHead
;
@Autowired
private
UserDetailsService
jwtUserDetailServiceImpl
;
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
ServletException
,
IOException
{
response
.
setHeader
(
"Access-Control-Allow-Origin"
,
"*"
);
response
.
setHeader
(
"Access-Control-Allow-Methods"
,
"POST, GET, OPTIONS, DELETE,PUT"
);
response
.
setHeader
(
"Access-Control-Allow-Headers"
,
"Authorization,Origin,X-Requested-With,X-File-Name,Content-Type, Accept"
);
log
.
info
(
"*********************************过滤器被使用**************************"
);
// 取得header
String
authHeader
=
request
.
getHeader
(
this
.
tokenHeader
);
//判断header头
if
(
authHeader
!=
null
&&
authHeader
.
startsWith
(
tokenHead
))
{
// The part after "Bearer "
final
String
authToken
=
authHeader
.
substring
(
tokenHead
.
length
());
//从jwt中获取信息,如果要缓存很多信息可以用Claims
String
username
=
JwtUtil
.
getUsernameFromToken
(
authToken
);
logger
.
info
(
"checking authentication "
+
username
);
if
(
username
!=
null
&&
SecurityContextHolder
.
getContext
().
getAuthentication
()
==
null
)
{
UserDetails
userDetails
=
this
.
jwtUserDetailServiceImpl
.
loadUserByUsername
(
username
);
//验证jwt的信息是否正确
if
(
JwtUtil
.
validateToken
(
authToken
,
userDetails
))
{
//将验证信息放入SecurityContextHolder中,UsernamePasswordAuthenticationToken是Security验证账号密码的工具类
UsernamePasswordAuthenticationToken
authentication
=
new
UsernamePasswordAuthenticationToken
(
userDetails
,
null
,
userDetails
.
getAuthorities
());
authentication
.
setDetails
(
new
WebAuthenticationDetailsSource
().
buildDetails
(
request
));
logger
.
info
(
"authenticated user "
+
username
+
", setting security context"
);
SecurityContextHolder
.
getContext
().
setAuthentication
(
authentication
);
}
}
}
filterChain
.
doFilter
(
request
,
response
);
}
}
src/main/java/org/rcisoft/core/security/RestAuthenticationEntryPoint.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
security
;
import
org.rcisoft.core.result.Result
;
import
org.rcisoft.core.result.ResultCode
;
import
org.springframework.security.core.AuthenticationException
;
import
org.springframework.security.web.AuthenticationEntryPoint
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* Created by lcy on 17/11/23.
*/
public
class
RestAuthenticationEntryPoint
implements
AuthenticationEntryPoint
{
/**
* 实现AuthenticationEntryPoint的commence方法自定义校验不通过的方法
*
* @param request
* @param response
* @param e
* @throws IOException
* @throws ServletException
*/
public
void
commence
(
HttpServletRequest
request
,
HttpServletResponse
response
,
AuthenticationException
e
)
throws
IOException
,
ServletException
{
// 捕获AuthenticationException中的message,并封装成自定义异常抛出
response
.
setCharacterEncoding
(
"utf-8"
);
//header 起作用
response
.
setHeader
(
"Content-type"
,
"application/json;charset=UTF-8"
);
response
.
getWriter
().
write
(
new
Result
().
setCode
(
ResultCode
.
UNAUTHORIZED
).
setMessage
(
"无权限"
).
toString
());
}
}
\ No newline at end of file
src/main/java/org/rcisoft/core/util/IdGen.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
util
;
import
java.security.SecureRandom
;
import
java.util.UUID
;
/**
* Created with family.
* author: cy
* Date: 16/6/2
* Time: 上午9:27
* description:
*/
public
class
IdGen
{
private
static
SecureRandom
random
=
new
SecureRandom
();
/**
* 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割.
*/
public
static
String
uuid
()
{
return
UUID
.
randomUUID
().
toString
().
replaceAll
(
"-"
,
""
);
}
}
src/main/java/org/rcisoft/core/util/JwtUserFactory.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
util
;
import
org.rcisoft.core.model.JwtUser
;
import
org.rcisoft.sys.user.entity.SysUser
;
import
org.springframework.security.core.GrantedAuthority
;
import
java.util.ArrayList
;
/**
* Created by lcy on 17/11/21.
*/
public
final
class
JwtUserFactory
{
private
JwtUserFactory
()
{
}
/**
* 创建JwtUser工厂
*/
public
static
JwtUser
create
(
SysUser
user
){
return
new
JwtUser
(
user
.
getBusinessId
(),
user
.
getUsername
(),
user
.
getPassword
(),
new
ArrayList
<
GrantedAuthority
>()
);
}
/**
* 讲User的List<Role>转换成JwtUser<GrantedAuthority>
private static List<GrantedAuthority> map2GrantedAuthorities(List<SysRole> authorities){
return authorities.stream()
.map(e -> role2SimpleGrantedAuthority(e))
.collect(Collectors.toList());
}
private static SimpleGrantedAuthority role2SimpleGrantedAuthority(SysRole role){
return new SimpleGrantedAuthority(role.getName());
}
*/
}
src/main/java/org/rcisoft/core/util/JwtUtil.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
util
;
import
io.jsonwebtoken.Claims
;
import
org.apache.commons.collections.map.HashedMap
;
import
org.rcisoft.core.bean.JwtBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.stereotype.Component
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
* Created by lcy on 17/11/21. *
* header.payload.signature
*
*
*/
@Component
public
class
JwtUtil
{
public
JwtUtil
()
{
}
private
static
JwtBean
jwtBean
;
@Autowired
private
JwtUtil
(
JwtBean
jwtBean
){
this
.
jwtBean
=
jwtBean
;
}
/**
* 根据token获取用户名
*/
public
static
String
getUsernameFromToken
(
String
token
){
try
{
Claims
claims
=
jwtBean
.
getClaimsFromToken
(
token
);
String
username
=
claims
.
getSubject
();
return
username
;
}
catch
(
Exception
e
){
return
null
;
}
}
/**
* 设置用户信息进jwt
*/
public
static
String
generateToken
(
UserDetails
userDetails
){
Map
<
String
,
Object
>
map
=
new
HashedMap
();
map
.
put
(
userDetails
.
getUsername
(),
userDetails
);
String
token
=
jwtBean
.
generateToken
(
userDetails
.
getUsername
(),
map
);
return
token
;
}
/**
* 验证token是否正确
* @param token
* @param userDetails
* @return
*/
public
static
boolean
validateToken
(
String
token
,
UserDetails
userDetails
){
Claims
claims
=
jwtBean
.
getClaimsFromToken
(
token
);
LinkedHashMap
<
String
,
Object
>
tokenUserDetails
=
(
LinkedHashMap
<
String
,
Object
>)
claims
.
get
(
userDetails
.
getUsername
());
boolean
usernameValid
=
userDetails
.
getUsername
().
equals
(
tokenUserDetails
.
get
(
"username"
));
boolean
passwordValid
=
userDetails
.
getPassword
().
equals
(
tokenUserDetails
.
get
(
"password"
));
if
(
usernameValid
||
passwordValid
)
// ?? &&
return
true
;
else
return
false
;
}
}
src/main/java/org/rcisoft/core/util/ResultGenerator.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
core
.
util
;
import
org.rcisoft.core.result.Result
;
import
org.rcisoft.core.result.ResultCode
;
/**
* Created by lcy on 17/11/24.
*/
public
class
ResultGenerator
{
private
static
final
String
DEFAULT_SUCCESS_MESSAGE
=
"SUCCESS"
;
public
static
Result
genSuccessResult
()
{
return
new
Result
()
.
setCode
(
ResultCode
.
SUCCESS
)
.
setMessage
(
DEFAULT_SUCCESS_MESSAGE
);
}
public
static
Result
genSuccessResult
(
Object
data
)
{
return
new
Result
()
.
setCode
(
ResultCode
.
SUCCESS
)
.
setMessage
(
DEFAULT_SUCCESS_MESSAGE
)
.
setData
(
data
);
}
public
static
Result
genFailResult
(
String
message
)
{
return
new
Result
()
.
setCode
(
ResultCode
.
FAIL
)
.
setMessage
(
message
);
}
}
src/main/java/org/rcisoft/sys/controller/SysController.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
controller
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
org.rcisoft.core.result.Result
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* Created by lcy on 17/8/13.
*/
@RestController
@RequestMapping
(
value
=
"sys"
)
public
class
SysController
{
/**
* login
* @param
* @param
* @return
@PostMapping(value = "/login")
public AjaxResponse login(String account, String pwd,AjaxResponse response){
Map<String,Object> map = new HashMap<String,Object>();
User user = null;
//登录成功
String token = JwtUtil.setClaim(account);
map.put("user", user);
map.put("token", token);
response.setSuccessMessage("登录成功",map);
return response;
}*/
@ApiOperation
(
value
=
"获取用户详细信息"
,
notes
=
"根据url的id来获取用户详细信息"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"用户ID"
,
required
=
true
,
dataType
=
"Integer"
,
paramType
=
"path"
)
@RequestMapping
(
value
=
"/user/{id}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json; charset=utf-8"
)
public
Result
testApi
(
@PathVariable
(
value
=
"id"
)
Integer
id
,
Result
result
){
result
.
setCode
(
400
);
result
.
setData
(
id
);
return
result
;
}
}
src/main/java/org/rcisoft/sys/model/AjaxResponse.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
model
;
public
class
AjaxResponse
{
private
String
state
;
private
String
message
;
private
Object
result
;
private
final
String
SUCCESS_STATE
=
"200"
;
private
final
String
ERROR_STATE
=
"999"
;
public
String
getState
()
{
return
state
;
}
public
void
setState
(
String
state
)
{
this
.
state
=
state
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
public
Object
getResult
()
{
return
result
;
}
public
void
setResult
(
Object
result
)
{
this
.
result
=
result
;
}
/**
* 成功提示
* @param message
* @param result
*/
public
void
setSuccessMessage
(
String
message
,
Object
result
){
this
.
setState
(
SUCCESS_STATE
);
this
.
setMessage
(
message
);
this
.
setResult
(
result
);
}
/**
* 失败提示
* @param message
* @param result
*/
public
void
setErrorMessage
(
String
message
,
Object
result
){
this
.
setState
(
ERROR_STATE
);
this
.
setMessage
(
message
);
this
.
setResult
(
result
);
}
}
src/main/java/org/rcisoft/sys/user/controller/UserController.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
user
.
controller
;
import
org.rcisoft.sys.model.AjaxResponse
;
import
org.rcisoft.sys.user.entity.SysUser
;
import
org.rcisoft.sys.user.service.UserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* Created by Andrew on 2017/7/6.
*/
@RestController
@RequestMapping
(
value
=
"/user"
)
public
class
UserController
{
@Autowired
private
UserService
userServiceImpl
;
@RequestMapping
(
value
=
"/addUser"
)
public
AjaxResponse
addUser
(
SysUser
user
,
AjaxResponse
response
){
try
{
userServiceImpl
.
addUser
(
user
);
response
.
setErrorMessage
(
"添加失败"
,
null
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
response
.
setErrorMessage
(
e
.
getMessage
(),
""
);
}
return
response
;
}
}
src/main/java/org/rcisoft/sys/user/dao/SysUserMapper.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
user
.
dao
;
import
org.rcisoft.core.base.BaseMapper
;
import
org.rcisoft.sys.user.entity.SysUser
;
/**
* Created by lcy on 17/8/9.
*/
public
interface
SysUserMapper
extends
BaseMapper
<
SysUser
>
{
}
src/main/java/org/rcisoft/sys/user/entity/SysUser.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
user
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.rcisoft.core.entity.IdEntity
;
import
javax.persistence.Entity
;
import
javax.persistence.Table
;
/**
* Created by lcy on 17/11/21.
*/
@Entity
@Table
(
name
=
"s_user"
)
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
SysUser
extends
IdEntity
<
SysUser
>
{
private
static
final
long
serialVersionUID
=
8885558381185320493L
;
/** 密码 */
private
String
password
;
/** 用户名 */
private
String
username
;
/** 用户名 */
private
String
name
;
}
src/main/java/org/rcisoft/sys/user/service/UserService.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
user
.
service
;
import
org.rcisoft.core.model.PersistModel
;
import
org.rcisoft.sys.user.entity.SysUser
;
public
interface
UserService
{
PersistModel
addUser
(
SysUser
user
);
}
src/main/java/org/rcisoft/sys/user/service/impl/UserServiceImpl.java
0 → 100644
View file @
25e879c0
package
org
.
rcisoft
.
sys
.
user
.
service
.
impl
;
import
org.rcisoft.core.model.PersistModel
;
import
org.rcisoft.sys.user.dao.SysUserMapper
;
import
org.rcisoft.sys.user.entity.SysUser
;
import
org.rcisoft.sys.user.service.UserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
@Service
@Transactional
(
readOnly
=
true
,
propagation
=
Propagation
.
NOT_SUPPORTED
)
public
class
UserServiceImpl
implements
UserService
{
@Autowired
private
SysUserMapper
sysUserMapper
;
@Transactional
(
propagation
=
Propagation
.
REQUIRED
,
readOnly
=
false
)
@Override
public
PersistModel
addUser
(
SysUser
user
)
{
int
line
=
sysUserMapper
.
insertSelective
(
user
);
return
new
PersistModel
(
line
);
}
}
Write
Preview
Markdown
is supported
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