自定义页面跳转,配置文件,参数拦截
package com.etc.config;
import com.etc.access.AccessInterCeptor;
import com.etc.access.AccessLimit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* @Author kalista
* aDescription自动义拦截器
* addInterceptors:拦截器
* addViewControllers:页面跳转
* addResourceHandLers:静态资源
* configureDefaultServletHandling:默认静态资源处理器
* configureViewResolvers:视图解析器
* configureContentNegotiation:配置内容裁决的一些参数
* addCorsMappings:跨域
* configureMessageConverters:信息转换器
* addArgumentResolvers自定义参数处理器
* @Date 2020/ 7/2016:53
*/
@Configuration
public class MvcConf implements WebMvcConfigurer {
@Autowired
private UserArgumentResolvers userArgumentResolvers;
@Autowired
private AccessInterCeptor accessInterCeptor;
/**
* 自定义参数处理器
* @param resolvers
*/
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(userArgumentResolvers);
}
/**
* 拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(accessInterCeptor);
}
/**
* 设置默认登录页面
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("index.html").setViewName("login");
registry.addViewController("login.html").setViewName("login");
}
}
从cookie获取用户
package com.etc.config;
import com.etc.domian.User;
import com.etc.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author Mr.findelist
* @program: seckillplus
* @Date 2020/7/22 17:53
**/
@Service
public class UserArgumentResolvers implements HandlerMethodArgumentResolver {
@Autowired
private UserServiceImpl userService;
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> parameterType = parameter.getParameterType();
return parameterType == User.class;
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer
, NativeWebRequest webRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
//请求响应
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
assert request != null;
String parameter = request.getParameter("token");
/*UserServiceImpl.COOKIE_TOKEN_NAME*/
String cookieValue = getCookieValue(request, "token");
if (StringUtils.isEmpty(parameter) && StringUtils.isEmpty(cookieValue)) {
return null;
}
String cookie=StringUtils.isEmpty(cookieValue)?parameter:cookieValue;
return userService.getcookie(response, cookie);
}
/**
* 获取cookie中token值
*/
private String getCookieValue(HttpServletRequest request, String cookieName) {
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for (Cookie cookie : cookies) {
if (cookie.getName().equals(cookieName)) {
return cookie.getValue();
}
}
}
return null;
}
}
判断用户登录 成功 写入缓存 和cookie
package com.etc.service.impl;
import com.alibaba.fastjson.JSON;
import com.etc.common.AbnoNum;
import com.etc.dao.UserDao;
import com.etc.domian.User;
import com.etc.domian.bo.UserBo;
import com.etc.exitpation.BizExiption;
import com.etc.redis.MiaoShaUserKey;
import com.etc.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.SessionAttributes;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;
/**
* @Author Mr.findelist
* @program: seckill
* @Date 2020/7/20 15:52
**/
@SessionAttributes({"user"})
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserDao userDao;
@Autowired
private StringRedisTemplate stringRedisTemplate;
public static final String COOKIE_TOKEN_NAME = "token";
@Override
public User findById(Long id) {
return userDao.selectById(id);
}
@Override
public boolean login(UserBo userBo, HttpServletResponse response, String y, ModelMap map, HttpServletRequest request) {
if (userBo == null) {
//用户名或密码为空
throw new BizExiption(AbnoNum.USERNAME_IS_NULL.getResCode(), AbnoNum.USERNAME_IS_NULL.getRestMsg());
}
User user = findById(userBo.getId());
if (user == null) {
//用户不存在
throw new BizExiption(AbnoNum.USERNAME_IS_ENIST.getResCode(), AbnoNum.USERNAME_IS_ENIST.getRestMsg());
}
if (!userBo.getPassword().equals(user.getPassword())) {
//密码错误
throw new BizExiption(AbnoNum.USERPASS_IS_ERROR.getResCode(), AbnoNum.USERPASS_IS_ERROR.getRestMsg());
}
if(userBo.getPassword().equals(user.getPassword())){
//写入cookie
String tokenuuid = UUID.randomUUID().toString().replace("-", "");
addcookie(response, tokenuuid, user);
map.put("user",user);
request.getSession().setAttribute("user",user);
return true;
}
return false;
}
@Override
public int updateById(User user) {
return userDao.updateById(user);
}
private void addcookie(HttpServletResponse response, String tokenuuid, User user) {
//写缓存
String s = JSON.toJSONString(user);
stringRedisTemplate.opsForValue().set(MiaoShaUserKey.token.getPrefix() + ":" + tokenuuid, s);
Cookie cookie = new Cookie(COOKIE_TOKEN_NAME,tokenuuid);
//设置过期时间(以秒为单位)
cookie.setMaxAge(MiaoShaUserKey.TOKEN_EXPIER);
//设置添加到根路径下
cookie.setPath("/");
//添加Cookie
response.addCookie(cookie);
}
/**
* 根据cookie获取用户
* @param response
* @param tokenuuid
* @return
*/
@Override
public User getcookie(HttpServletResponse response, String tokenuuid) {
if (StringUtils.isEmpty(tokenuuid)) {
return null;
}
String s = stringRedisTemplate.opsForValue().get(MiaoShaUserKey.token.getPrefix() + ":" + tokenuuid);
User user = JSON.parseObject(s, User.class);
/*if (user != null) {
addcookie(response, tokenuuid, user);
}*/
return user;
}
}