理清了SpringSecurity的执行过程,自动生成Entity转Dto的@Mappper注解的作用

pull/383/head
Nick 2020-04-07 16:11:59 +08:00
parent fa1d4f6f06
commit a92198a836
8 changed files with 42 additions and 3 deletions

View File

@ -45,7 +45,7 @@ public class LogAspect {
/**
* ,使logPointcut()
*
* 使@Around("@annotation(me.zhengjie.aop.log.Log)")
* @param joinPoint join point for advice
*/
@Around("logPointcut()")

View File

@ -4,11 +4,16 @@ import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.persistence.Entity;
/**
* Jwt
* @author Zheng Jie
* @date 20191128
* ConfigurationPropertiesapplicaition.propertiesBean使
* Configuration,Spring,ConfigurationProperties
*/
@Data
@Configuration

View File

@ -94,10 +94,16 @@ public class AuthController {
if (StringUtils.isBlank(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) {
throw new BadRequestException("验证码错误");
}
/**
* Authentication;,principal,credentials,
* authenticationTokenSpringSecurityauthenticate(authenticationToken)
* boolean isAuthenticated()Authentication
*/
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(authUser.getUsername(), password);
/**
* token
*
*/
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);

View File

@ -21,6 +21,7 @@ public class TokenConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFi
TokenFilter customFilter = new TokenFilter(tokenProvider);
/**
* filter,token
* 访,token,tokenfilter,访
*/
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
}

View File

@ -19,6 +19,8 @@ import java.io.IOException;
/**
* @author /
* GenericFilterBeaninit-doFilter-destoryinitdestorydoFilter
* 使GenericFilterBean,使
*/
@Slf4j
public class TokenFilter extends GenericFilterBean {
@ -33,17 +35,27 @@ public class TokenFilter extends GenericFilterBean {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//从request中提取token中的密文
String token = resolveToken(httpServletRequest);
String requestRri = httpServletRequest.getRequestURI();
// 验证 token 是否存在
OnlineUser onlineUser = null;
try {
/**
* TokenFilterSpring(),Spring
* 使
*/
SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
//从redis中获取在线用户
onlineUser = onlineUserService.getOne(properties.getOnlineKey() + token);
} catch (ExpiredJwtException e) {
log.error(e.getMessage());
}
/**
*
*/
if (onlineUser != null && StringUtils.hasText(token) && tokenProvider.validateToken(token)) {
Authentication authentication = tokenProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
@ -54,6 +66,7 @@ public class TokenFilter extends GenericFilterBean {
filterChain.doFilter(servletRequest, servletResponse);
}
//提取token,token格式Bearer空格+一串密文
private String resolveToken(HttpServletRequest request) {
SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
String bearerToken = request.getHeader(properties.getHeader());

View File

@ -37,6 +37,12 @@ public class TokenProvider implements InitializingBean {
@Override
public void afterPropertiesSet() {
/**
* base64-secret
* 使HMAC-SHASecretKeyKey
* 使secret,
* secret, jwt
*/
byte[] keyBytes = Decoders.BASE64.decode(properties.getBase64Secret());
this.key = Keys.hmacShaKeyFor(keyBytes);
}
@ -48,7 +54,9 @@ public class TokenProvider implements InitializingBean {
long now = (new Date()).getTime();
Date validity = new Date(now + properties.getTokenValidityInSeconds());
/**
* 使HmacSHA512
*/
return Jwts.builder()
.setSubject(authentication.getName())
.claim(AUTHORITIES_KEY, authorities)

View File

@ -9,6 +9,12 @@ import org.mapstruct.ReportingPolicy;
/**
* @author Zheng Jie
* @date 2018-12-17
* componentModeldefault,使Mappers.getMapper(Class)Mapper
* componentModelspring,使Spring
* unmappedTargetPolicy(Target)(Source) :
* 1> ERROR :
* 2> WARN :
* 3> IGNORE :
*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MenuMapper extends BaseMapper<MenuDto, Menu> {

View File

@ -46,7 +46,7 @@ jwt:
header: Authorization
# 令牌前缀
token-start-with: Bearer
# 必须使用最少88位的Base64对该令牌进行编码
# 必须使用最少88位的Base64对该令牌进行编码,可以通过这个加密的密文生成服务器存储的秘钥
base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
# 令牌过期时间 此处单位/毫秒 默认4小时可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
token-validity-in-seconds: 14400000