//package com.mes.filter;
|
//
|
//import com.fasterxml.jackson.databind.ObjectMapper;
|
//import com.mes.utils.Result;
|
//import com.mes.entity.SecurityUser;
|
//import com.mes.entity.User;
|
//import com.mes.security.TokenManager;
|
//import com.mes.utils.ResponseUtil;
|
//import org.springframework.data.redis.core.RedisTemplate;
|
//import org.springframework.security.authentication.AuthenticationManager;
|
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
//import org.springframework.security.core.Authentication;
|
//import org.springframework.security.core.AuthenticationException;
|
//import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
//import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
//
|
//import javax.servlet.FilterChain;
|
//import javax.servlet.ServletException;
|
//import javax.servlet.http.HttpServletRequest;
|
//import javax.servlet.http.HttpServletResponse;
|
//import java.io.IOException;
|
//import java.util.ArrayList;
|
//
|
//public class TokenLoginFilter extends UsernamePasswordAuthenticationFilter {
|
//
|
// private TokenManager tokenManager;
|
// private RedisTemplate redisTemplate;
|
// private AuthenticationManager authenticationManager;
|
//
|
// public TokenLoginFilter(AuthenticationManager authenticationManager, TokenManager tokenManager, RedisTemplate redisTemplate) {
|
// this.authenticationManager = authenticationManager;
|
// this.tokenManager = tokenManager;
|
// this.redisTemplate = redisTemplate;
|
// this.setPostOnly(false);
|
// this.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/admin/acl/login","POST"));
|
// }
|
//
|
// //1 获取表单提交用户名和密码
|
// @Override
|
// public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
|
// throws AuthenticationException {
|
// //获取表单提交数据
|
// try {
|
// User user = new ObjectMapper().readValue(request.getInputStream(), User.class);
|
// return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(user.getUsername(),user.getPassword(),
|
// new ArrayList<>()));
|
// } catch (IOException e) {
|
// e.printStackTrace();
|
// throw new RuntimeException();
|
// }
|
// }
|
//
|
// //2 认证成功调用的方法
|
// @Override
|
// protected void successfulAuthentication(HttpServletRequest request,
|
// HttpServletResponse response, FilterChain chain, Authentication authResult)
|
// throws IOException, ServletException {
|
// //认证成功,得到认证成功之后用户信息
|
// SecurityUser user = (SecurityUser)authResult.getPrincipal();
|
// //根据用户名生成token
|
// String token = tokenManager.createToken(user.getCurrentUserInfo().getUsername());
|
// //把用户名称和用户权限列表放到redis
|
// redisTemplate.opsForValue().set(user.getCurrentUserInfo().getUsername(),user.getPermissionValueList());
|
// //返回token
|
// ResponseUtil.out(response, Result.success(token));
|
// }
|
//
|
// //3 认证失败调用的方法
|
// @Override
|
// protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed)
|
// throws IOException, ServletException {
|
// ResponseUtil.out(response, Result.error());
|
// }
|
//}
|