refactor(商城): 代码优化

master
wayn 4 years ago
parent 82a2e8977f
commit f1a4555739

@ -41,7 +41,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
* AuthenticationManager
*
* @return
* @throws Exception
*/
@Bean
@Override
@ -58,6 +57,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
.csrf().disable()
// 认证失败处理类
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.exceptionHandling().and()
// 基于token所以不需要session
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
// 过滤请求

@ -1,8 +1,15 @@
package com.wayn.admin.framework.security.filter;
import com.wayn.admin.framework.security.service.TokenService;
import com.wayn.common.constant.Constants;
import com.wayn.common.core.model.LoginUserDetail;
import com.wayn.common.enums.ReturnCodeEnum;
import com.wayn.common.util.R;
import com.wayn.common.util.json.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
@ -18,9 +25,8 @@ import java.util.Objects;
/**
* token token
*
* @author ruoyi
*/
@Slf4j
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@ -28,16 +34,29 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
private TokenService tokenService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
LoginUserDetail loginUser = tokenService.getLoginUser(request);
if (Objects.nonNull(loginUser) && Objects.isNull(SecurityContextHolder.getContext().getAuthentication())) {
tokenService.verifyToken(loginUser);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
try {
LoginUserDetail loginUser = tokenService.getLoginUser(request);
if (Objects.nonNull(loginUser) && Objects.isNull(SecurityContextHolder.getContext().getAuthentication())) {
tokenService.verifyToken(loginUser);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
}
chain.doFilter(request, response);
} catch (RedisConnectionFailureException exception) {
response.setStatus(HttpStatus.OK.value());
response.setContentType("application/json");
response.setCharacterEncoding(Constants.UTF_ENCODING);
try {
response.getWriter().print(JsonUtil.marshal(R.error(ReturnCodeEnum.REDIS_CONNECTION_TIMEOUT_ERROR)));
} catch (Exception e) {
log.error(e.getMessage(), e);
}
} catch (Exception exception) {
log.error(String.format("认证异常msg:%s", exception.getMessage()), exception);
chain.doFilter(request, response);
}
chain.doFilter(request, response);
}
}

@ -1,7 +1,9 @@
package com.wayn.admin.framework.security.handle;
import com.wayn.common.constant.Constants;
import com.wayn.common.util.R;
import com.wayn.common.util.json.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
@ -14,6 +16,7 @@ import java.io.Serializable;
/**
*
*/
@Slf4j
@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable {
private static final long serialVersionUID = -8970718410437077606L;
@ -23,12 +26,12 @@ public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, S
int code = HttpStatus.UNAUTHORIZED.value();
String msg = String.format("请求访问:%s认证失败无法访问系统资源", request.getRequestURI());
try {
response.setStatus(200);
response.setStatus(HttpStatus.OK.value());
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.setCharacterEncoding(Constants.UTF_ENCODING);
response.getWriter().print(JsonUtil.marshal(R.error(code, msg)));
} catch (Exception exception) {
exception.printStackTrace();
log.error(exception.getMessage(), exception);
}
}

@ -7,6 +7,7 @@ import com.wayn.common.util.json.JsonUtil;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
@ -35,7 +36,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
tokenService.delLoginUser(loginUser.getToken());
}
// 设置状态码
response.setStatus(200);
response.setStatus(HttpStatus.OK.value());
// 将登录失败信息打包成json格式返回
response.setContentType("application/json;charset=UTF-8");
response.getWriter().print(JsonUtil.marshal(R.success()));

@ -55,18 +55,24 @@ public enum ReturnCodeEnum {
GOODS_SPEC_ONLY_START_ONE_DEFAULT_SELECTED_ERROR(5301, "商品规格只能选择一个启用默认选中"),
GOODS_HAS_OFFSHELF_ERROR(5302, "商品已经下架"),
GOODS_STOCK_NOT_ENOUGH_ERROR(5302, "商品库存不足"),
GOODS_STOCK_NOT_ENOUGH_ERROR(5303, "商品库存不足"),
DEPT_HAS_SUB_DEPT_ERROR(5401, "存在下级部门,不允许删除"),
DEPT_HAS_USER_ERROR(5401, "部门存在用户,不允许删除"),
DEPT_HAS_USER_ERROR(5402, "部门存在用户,不允许删除"),
MENU_HAS_SUB_MENU_ERROR(5501, "存在子菜单,不允许删除"),
MENU_HAS_DISTRIBUTE_ERROR(5502, "菜单已分配,不允许删除"),
TOOL_EMAIL_ERROR(5601, "邮件信息未配置完全,请先填写配置信息"),
TOOL_QINIU_NOT_EXISTS_ERROR(5602, "七牛云配置不存在"),
TOOL_QINIU_CONFIG_ERROR(5602, "七牛云配置错误"),
TOOL_QINIU_CONFIG_ERROR(5603, "七牛云配置错误"),
/**
* 6xxx
*/
REDIS_CONNECTION_TIMEOUT_ERROR(6001, "redis连接超时"),
ES_CONNECTION_TIMEOUT_ERROR(6002, "es连接超时"),
;
private int code;
private String msg;

@ -10,10 +10,7 @@ import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
@ -64,7 +61,7 @@ public class EmailDirectReceiver {
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(multiValueMap, headers);
try {
ResponseEntity<String> response = restTemplate.postForEntity(notifyUrl, request, String.class);
if (response.getStatusCode().value() != 200) {
if (response.getStatusCode().value() != HttpStatus.OK.value()) {
throw new Exception("邮件发送失败 " + testMessage);
}
JSONObject jsonObject = JSONObject.parseObject(response.getBody());

@ -10,10 +10,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
@ -67,7 +64,7 @@ public class OrderDirectReceiver {
multiValueMap.add("order", msgObject.get("order"));
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(multiValueMap, headers);
ResponseEntity<String> response = restTemplate.postForEntity(notifyUrl, request, String.class);
if (response.getStatusCode().value() != 200) {
if (response.getStatusCode().value() != HttpStatus.OK.value()) {
throw new Exception("下单失败 " + msgObject);
}
JSONObject jsonObject = JSONObject.parseObject(response.getBody());

@ -23,7 +23,7 @@ public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, S
int code = HttpStatus.UNAUTHORIZED.value();
String msg = String.format("请求访问:%s认证失败无法访问系统资源", request.getRequestURI());
try {
response.setStatus(200);
response.setStatus(HttpStatus.OK.value());
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print(JsonUtil.marshal(R.error(code, msg)));

@ -7,6 +7,7 @@ import com.wayn.mobile.framework.security.service.TokenService;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
@ -35,7 +36,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
tokenService.delLoginUser(loginUser.getToken());
}
// 设置状态码
response.setStatus(200);
response.setStatus(HttpStatus.OK.value());
// 将登录失败信息打包成json格式返回
response.setContentType("application/json;charset=UTF-8");
response.getWriter().print(JsonUtil.marshal(R.success()));

Loading…
Cancel
Save