Commit 8c4fd97e authored by 郑杰's avatar 郑杰
Browse files

v1.5 beta版发布,详细查看发行版说明

parent b066bb99
package me.zhengjie.quartz.service; package me.zhengjie.modules.quartz.service;
import me.zhengjie.quartz.domain.QuartzJob; import me.zhengjie.modules.quartz.domain.QuartzJob;
import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
/** /**
* @author 郑杰 * @author jie
* @date 2018/10/05 19:17:38 * @date 2019-01-07
*/ */
@CacheConfig(cacheNames = "quartzJob") @CacheConfig(cacheNames = "quartzJob")
public interface QuartzJobService { public interface QuartzJobService {
......
package me.zhengjie.quartz.service.impl; package me.zhengjie.modules.quartz.service.impl;
import me.zhengjie.common.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.common.utils.ValidationUtil; import me.zhengjie.modules.quartz.domain.QuartzJob;
import me.zhengjie.quartz.domain.QuartzJob; import me.zhengjie.modules.quartz.repository.QuartzJobRepository;
import me.zhengjie.quartz.repository.QuartzJobRepository; import me.zhengjie.modules.quartz.service.QuartzJobService;
import me.zhengjie.quartz.service.QuartzJobService; import me.zhengjie.modules.quartz.utils.QuartzManage;
import me.zhengjie.quartz.utils.QuartzManage; import me.zhengjie.utils.ValidationUtil;
import org.quartz.CronExpression; import org.quartz.CronExpression;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Optional; import java.util.Optional;
/** /**
......
package me.zhengjie.quartz.service.query; package me.zhengjie.modules.quartz.service.query;
import me.zhengjie.common.utils.PageUtil; import me.zhengjie.modules.quartz.domain.QuartzJob;
import me.zhengjie.quartz.domain.QuartzJob; import me.zhengjie.modules.quartz.repository.QuartzJobRepository;
import me.zhengjie.quartz.repository.QuartzJobRepository; import me.zhengjie.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
......
package me.zhengjie.quartz.service.query; package me.zhengjie.modules.quartz.service.query;
import me.zhengjie.common.utils.PageUtil; import me.zhengjie.modules.quartz.domain.QuartzLog;
import me.zhengjie.quartz.domain.QuartzLog; import me.zhengjie.modules.quartz.repository.QuartzLogRepository;
import me.zhengjie.quartz.repository.QuartzLogRepository; import me.zhengjie.utils.PageUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
......
package me.zhengjie.quartz.task; package me.zhengjie.modules.quartz.task;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
package me.zhengjie.quartz.task; package me.zhengjie.modules.quartz.task;
import me.zhengjie.monitor.service.VisitsService; import me.zhengjie.modules.monitor.service.VisitsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
package me.zhengjie.quartz.utils; package me.zhengjie.modules.quartz.utils;
import me.zhengjie.common.utils.SpringContextHolder; import me.zhengjie.modules.quartz.domain.QuartzJob;
import me.zhengjie.common.utils.ThrowableUtil; import me.zhengjie.modules.quartz.domain.QuartzLog;
import me.zhengjie.quartz.domain.QuartzJob; import me.zhengjie.modules.quartz.repository.QuartzLogRepository;
import me.zhengjie.quartz.domain.QuartzLog; import me.zhengjie.modules.quartz.service.QuartzJobService;
import me.zhengjie.quartz.repository.QuartzLogRepository; import me.zhengjie.utils.SpringContextHolder;
import me.zhengjie.quartz.service.QuartzJobService; import me.zhengjie.utils.ThrowableUtil;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.Scheduler; import org.quartz.Scheduler;
import org.slf4j.Logger; import org.slf4j.Logger;
......
package me.zhengjie.quartz.utils; package me.zhengjie.modules.quartz.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.common.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.quartz.domain.QuartzJob; import me.zhengjie.modules.quartz.domain.QuartzJob;
import org.quartz.*; import org.quartz.*;
import org.quartz.impl.triggers.CronTriggerImpl; import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -50,7 +50,7 @@ public class QuartzManage { ...@@ -50,7 +50,7 @@ public class QuartzManage {
} }
} catch (Exception e){ } catch (Exception e){
log.error("创建定时任务失败", e); log.error("创建定时任务失败", e);
throw new BadRequestException(e.getMessage()); throw new BadRequestException("创建定时任务失败");
} }
} }
...@@ -63,6 +63,11 @@ public class QuartzManage { ...@@ -63,6 +63,11 @@ public class QuartzManage {
try { try {
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
// 如果不存在则创建一个定时任务
if(trigger == null){
addJob(quartzJob);
trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
}
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression()); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression());
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
//重置启动时间 //重置启动时间
...@@ -75,7 +80,7 @@ public class QuartzManage { ...@@ -75,7 +80,7 @@ public class QuartzManage {
} }
} catch (Exception e){ } catch (Exception e){
log.error("更新定时任务失败", e); log.error("更新定时任务失败", e);
throw new BadRequestException(e.getMessage()); throw new BadRequestException("更新定时任务失败");
} }
} }
...@@ -91,7 +96,7 @@ public class QuartzManage { ...@@ -91,7 +96,7 @@ public class QuartzManage {
scheduler.deleteJob(jobKey); scheduler.deleteJob(jobKey);
} catch (Exception e){ } catch (Exception e){
log.error("删除定时任务失败", e); log.error("删除定时任务失败", e);
throw new BadRequestException(e.getMessage()); throw new BadRequestException("删除定时任务失败");
} }
} }
...@@ -112,7 +117,7 @@ public class QuartzManage { ...@@ -112,7 +117,7 @@ public class QuartzManage {
scheduler.resumeJob(jobKey); scheduler.resumeJob(jobKey);
} catch (Exception e){ } catch (Exception e){
log.error("恢复定时任务失败", e); log.error("恢复定时任务失败", e);
throw new BadRequestException(e.getMessage()); throw new BadRequestException("恢复定时任务失败");
} }
} }
...@@ -135,7 +140,7 @@ public class QuartzManage { ...@@ -135,7 +140,7 @@ public class QuartzManage {
scheduler.triggerJob(jobKey,dataMap); scheduler.triggerJob(jobKey,dataMap);
} catch (Exception e){ } catch (Exception e){
log.error("定时任务执行失败", e); log.error("定时任务执行失败", e);
throw new BadRequestException(e.getMessage()); throw new BadRequestException("定时任务执行失败");
} }
} }
...@@ -150,7 +155,7 @@ public class QuartzManage { ...@@ -150,7 +155,7 @@ public class QuartzManage {
scheduler.pauseJob(jobKey); scheduler.pauseJob(jobKey);
} catch (Exception e){ } catch (Exception e){
log.error("定时任务暂停失败", e); log.error("定时任务暂停失败", e);
throw new BadRequestException(e.getMessage()); throw new BadRequestException("定时任务暂停失败");
} }
} }
} }
package me.zhengjie.quartz.utils; package me.zhengjie.modules.quartz.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.common.utils.SpringContextHolder; import me.zhengjie.utils.SpringContextHolder;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Method; import java.lang.reflect.Method;
......
package me.zhengjie.core.config; package me.zhengjie.modules.security.config;
import me.zhengjie.core.security.JwtAuthenticationEntryPoint; import me.zhengjie.modules.security.security.JwtAuthenticationEntryPoint;
import me.zhengjie.core.security.JwtAuthorizationTokenFilter; import me.zhengjie.modules.security.security.JwtAuthorizationTokenFilter;
import me.zhengjie.core.service.JwtUserDetailsService; import me.zhengjie.modules.security.service.JwtUserDetailsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -23,7 +23,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic ...@@ -23,7 +23,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
@Configuration @Configuration
@EnableWebSecurity @EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true) @EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired @Autowired
private JwtAuthenticationEntryPoint unauthorizedHandler; private JwtAuthenticationEntryPoint unauthorizedHandler;
...@@ -63,6 +63,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -63,6 +63,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override @Override
protected void configure(HttpSecurity httpSecurity) throws Exception { protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity httpSecurity
// 禁用 CSRF // 禁用 CSRF
......
package me.zhengjie.core.rest; package me.zhengjie.modules.security.rest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.common.aop.log.Log; import me.zhengjie.aop.log.Log;
import me.zhengjie.core.security.AuthenticationToken; import me.zhengjie.modules.security.security.AuthenticationToken;
import me.zhengjie.core.security.AuthorizationUser; import me.zhengjie.modules.security.security.AuthorizationUser;
import me.zhengjie.core.utils.JwtTokenUtil; import me.zhengjie.modules.security.security.JwtUser;
import me.zhengjie.core.security.JwtUser; import me.zhengjie.utils.EncryptUtils;
import me.zhengjie.core.utils.EncryptUtils; import me.zhengjie.modules.security.utils.JwtTokenUtil;
import me.zhengjie.utils.SecurityContextHolder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AccountExpiredException; import org.springframework.security.authentication.AccountExpiredException;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/** /**
* @author jie * @author jie
...@@ -31,9 +30,6 @@ public class AuthenticationController { ...@@ -31,9 +30,6 @@ public class AuthenticationController {
@Value("${jwt.header}") @Value("${jwt.header}")
private String tokenHeader; private String tokenHeader;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired @Autowired
private JwtTokenUtil jwtTokenUtil; private JwtTokenUtil jwtTokenUtil;
...@@ -46,9 +42,9 @@ public class AuthenticationController { ...@@ -46,9 +42,9 @@ public class AuthenticationController {
* @param authorizationUser * @param authorizationUser
* @return * @return
*/ */
@Log(description = "用户登录") @Log("用户登录")
@PostMapping(value = "${jwt.auth.path}") @PostMapping(value = "${jwt.auth.path}")
public ResponseEntity<?> authenticationLogin(@RequestBody AuthorizationUser authorizationUser){ public ResponseEntity<?> login(@RequestBody AuthorizationUser authorizationUser){
final UserDetails userDetails = userDetailsService.loadUserByUsername(authorizationUser.getUsername()); final UserDetails userDetails = userDetailsService.loadUserByUsername(authorizationUser.getUsername());
...@@ -69,12 +65,12 @@ public class AuthenticationController { ...@@ -69,12 +65,12 @@ public class AuthenticationController {
/** /**
* 获取用户信息 * 获取用户信息
* @param request
* @return * @return
*/ */
@GetMapping(value = "${jwt.auth.account}") @GetMapping(value = "${jwt.auth.account}")
public ResponseEntity getUserInfo(HttpServletRequest request){ public ResponseEntity getUserInfo(){
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(jwtTokenUtil.getUserName(request)); UserDetails userDetails = SecurityContextHolder.getUserDetails();
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(userDetails.getUsername());
return ResponseEntity.ok(jwtUser); return ResponseEntity.ok(jwtUser);
} }
} }
package me.zhengjie.core.security; package me.zhengjie.modules.security.security;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import java.io.Serializable; import java.io.Serializable;
/** /**
......
package me.zhengjie.core.security; package me.zhengjie.modules.security.security;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
......
package me.zhengjie.core.security; package me.zhengjie.modules.security.security;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.AuthenticationEntryPoint;
......
package me.zhengjie.core.security; package me.zhengjie.modules.security.security;
import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.ExpiredJwtException;
import me.zhengjie.core.utils.JwtTokenUtil; import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; import me.zhengjie.modules.security.utils.JwtTokenUtil;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
...@@ -19,11 +18,10 @@ import javax.servlet.http.HttpServletRequest; ...@@ -19,11 +18,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
@Slf4j
@Component @Component
public class JwtAuthorizationTokenFilter extends OncePerRequestFilter { public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final UserDetailsService userDetailsService; private final UserDetailsService userDetailsService;
private final JwtTokenUtil jwtTokenUtil; private final JwtTokenUtil jwtTokenUtil;
private final String tokenHeader; private final String tokenHeader;
...@@ -36,7 +34,7 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter { ...@@ -36,7 +34,7 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
logger.debug("processing authentication for '{}'", request.getRequestURL()); log.debug("processing authentication for '{}'", request.getRequestURL());
final String requestHeader = request.getHeader(this.tokenHeader); final String requestHeader = request.getHeader(this.tokenHeader);
...@@ -47,14 +45,14 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter { ...@@ -47,14 +45,14 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
try { try {
username = jwtTokenUtil.getUsernameFromToken(authToken); username = jwtTokenUtil.getUsernameFromToken(authToken);
} catch (ExpiredJwtException e) { } catch (ExpiredJwtException e) {
logger.error(e.getMessage()); log.error(e.getMessage());
} }
} }
logger.debug("checking authentication for user '{}'", username); log.debug("checking authentication for user '{}'", username);
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
logger.debug("security context was null, so authorizating user"); log.debug("security context was null, so authorizating user");
// It is not compelling necessary to load the use details from the database. You could also store the information // It is not compelling necessary to load the use details from the database. You could also store the information
// in the token and read it from it. It's up to you ;) // in the token and read it from it. It's up to you ;)
...@@ -65,7 +63,7 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter { ...@@ -65,7 +63,7 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
if (jwtTokenUtil.validateToken(authToken, userDetails)) { if (jwtTokenUtil.validateToken(authToken, userDetails)) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
logger.info("authorizated user '{}', setting security context", username); log.info("authorizated user '{}', setting security context", username);
SecurityContextHolder.getContext().setAuthentication(authentication); SecurityContextHolder.getContext().setAuthentication(authentication);
} }
} }
......
package me.zhengjie.core.security; package me.zhengjie.modules.security.security;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -7,7 +7,10 @@ import org.springframework.security.core.GrantedAuthority; ...@@ -7,7 +7,10 @@ import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.*; import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;
/** /**
* @author jie * @author jie
......
package me.zhengjie.core.service; package me.zhengjie.modules.security.service;
import me.zhengjie.common.exception.EntityNotFoundException; import me.zhengjie.modules.system.domain.Permission;
import me.zhengjie.common.utils.ValidationUtil; import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.core.security.JwtUser; import me.zhengjie.modules.system.domain.User;
import me.zhengjie.system.domain.Permission; import me.zhengjie.exception.EntityNotFoundException;
import me.zhengjie.system.domain.Role; import me.zhengjie.modules.system.repository.UserRepository;
import me.zhengjie.system.domain.User; import me.zhengjie.modules.security.security.JwtUser;
import me.zhengjie.system.repository.PermissionRepository; import me.zhengjie.utils.ValidationUtil;
import me.zhengjie.system.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
...@@ -18,7 +17,6 @@ import org.springframework.security.core.userdetails.UserDetailsService; ...@@ -18,7 +17,6 @@ import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
...@@ -35,9 +33,6 @@ public class JwtUserDetailsService implements UserDetailsService { ...@@ -35,9 +33,6 @@ public class JwtUserDetailsService implements UserDetailsService {
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
@Autowired
private PermissionRepository permissionRepository;
@Override @Override
public UserDetails loadUserByUsername(String username){ public UserDetails loadUserByUsername(String username){
...@@ -62,20 +57,20 @@ public class JwtUserDetailsService implements UserDetailsService { ...@@ -62,20 +57,20 @@ public class JwtUserDetailsService implements UserDetailsService {
user.getPassword(), user.getPassword(),
user.getAvatar(), user.getAvatar(),
user.getEmail(), user.getEmail(),
mapToGrantedAuthorities(user.getRoles(),permissionRepository), mapToGrantedAuthorities(user.getRoles()),
user.getEnabled(), user.getEnabled(),
user.getCreateTime(), user.getCreateTime(),
user.getLastPasswordResetTime() user.getLastPasswordResetTime()
); );
} }
private static List<GrantedAuthority> mapToGrantedAuthorities(Set<Role> roles,PermissionRepository permissionRepository) { private static List<GrantedAuthority> mapToGrantedAuthorities(Set<Role> roles) {
Set<Permission> permissions = new HashSet<>(); Set<Permission> permissions = new HashSet<>();
for (Role role : roles) { for (Role role : roles) {
Set<Role> roleSet = new HashSet<>(); Set<Role> roleSet = new HashSet<>();
roleSet.add(role); roleSet.add(role);
permissions.addAll(permissionRepository.findByRoles(roleSet)); permissions.addAll(role.getPermissions());
} }
return permissions.stream() return permissions.stream()
......
package me.zhengjie.core.utils; package me.zhengjie.modules.security.utils;
import io.jsonwebtoken.*; import io.jsonwebtoken.*;
import io.jsonwebtoken.impl.DefaultClock; import io.jsonwebtoken.impl.DefaultClock;
import me.zhengjie.common.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.core.security.JwtUser; import me.zhengjie.modules.security.security.JwtUser;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
...@@ -111,31 +111,14 @@ public class JwtTokenUtil implements Serializable { ...@@ -111,31 +111,14 @@ public class JwtTokenUtil implements Serializable {
JwtUser user = (JwtUser) userDetails; JwtUser user = (JwtUser) userDetails;
final String username = getUsernameFromToken(token); final String username = getUsernameFromToken(token);
final Date created = getIssuedAtDateFromToken(token); final Date created = getIssuedAtDateFromToken(token);
//final Date expiration = getExpirationDateFromToken(token); // final Date expiration = getExpirationDateFromToken(token);
// 如果token存在,且token创建日期 > 最后修改密码的日期 则代表token有效
return ( return (
username.equals(user.getUsername()) username.equals(user.getUsername())
&& !isTokenExpired(token) && !isTokenExpired(token)
&& !isCreatedBeforeLastPasswordReset(created, user.getLastPasswordResetDate()) && !isCreatedBeforeLastPasswordReset(created, user.getLastPasswordResetDate())
); );
} }
public String getUserName(HttpServletRequest request){
String authToken = request.getHeader(tokenHeader);
if(StringUtils.isEmpty(authToken)||authToken.length()<7){
throw new BadRequestException(HttpStatus.FORBIDDEN,"Token令牌无效");
}
final String token = authToken.substring(7);
String username = null;
try {
username = getUsernameFromToken(token);
} catch (ExpiredJwtException e){
throw new BadRequestException(HttpStatus.UNAUTHORIZED,"Token令牌已过期");
}
return username;
}
private Date calculateExpirationDate(Date createdDate) { private Date calculateExpirationDate(Date createdDate) {
return new Date(createdDate.getTime() + expiration); return new Date(createdDate.getTime() + expiration);
......
package me.zhengjie.system.domain; package me.zhengjie.modules.system.domain;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
...@@ -44,6 +44,7 @@ public class Menu { ...@@ -44,6 +44,7 @@ public class Menu {
/** /**
* 是否为外链 true/false * 是否为外链 true/false
*/ */
@Column(name = "i_frame")
private Boolean iFrame; private Boolean iFrame;
@ManyToMany @ManyToMany
...@@ -51,5 +52,6 @@ public class Menu { ...@@ -51,5 +52,6 @@ public class Menu {
private Set<Role> roles; private Set<Role> roles;
@CreationTimestamp @CreationTimestamp
@Column(name = "create_time")
private Timestamp createTime; private Timestamp createTime;
} }
package me.zhengjie.system.domain; package me.zhengjie.modules.system.domain;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
...@@ -43,6 +44,7 @@ public class Permission implements Serializable{ ...@@ -43,6 +44,7 @@ public class Permission implements Serializable{
private Set<Role> roles; private Set<Role> roles;
@CreationTimestamp @CreationTimestamp
@Column(name = "create_time")
private Timestamp createTime; private Timestamp createTime;
@Override @Override
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment