//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()); // } //}