public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String token = httpServletRequest.getHeader("token"); try { if (StrUtil.isNotBlank(token)) { // 获取 token payload 信息 PayloadDataDTO payloadDataDTO = RsaTokenUtil.verifyAccessToken(token, RsaTokenUtil.generatePublicKey(KeyFactory.getInstance("RSA"))); // 根据用户名查询用户 UserDO userDO = userMapper.getByUserName(payloadDataDTO.getUserName()); // 单点登录判断 if(token.equals(userDO.getAccessToken())){ //security自带的框架,通过才能进入 UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(payloadDataDTO, null, null); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpServletRequest)); SecurityContextHolder.getContext().setAuthentication(authentication); //把通过的东西放到自定义的实体里 servletRequest.setAttribute("userInfo", payloadDataDTO); } }
时间: 2023-06-18 18:04:08 浏览: 58
JSP使用Servlet过滤器进行身份验证的方法
这段代码是一个 Servlet Filter,用于在请求被处理之前进行身份验证和授权。它首先从请求头中获取 token,并使用公钥对其进行验证,然后根据用户名查询用户,并判断 token 是否与用户的 accessToken 相等,以确定是否进行单点登录。如果验证通过,就将用户信息存储在 authentication 中,并将其放入 SecurityContextHolder 中,以便后续的请求处理可以获取到用户信息。最后,将通过身份验证的用户信息放入自定义的 userInfo 实体中,以便在后续的请求处理中使用。
阅读全文
相关推荐
Filter filter = new Filter() { @Override public void init(javax.servlet.FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); // 重置缓冲区,响应头不会被重置 response.resetBuffer(); // 获取common.js String text = Utils.readFromResource(filePath); // 正则替换banner, 除去底部的广告信息 text = text.replaceAll("<a.*?banner\">
", ""); text = text.replaceAll("powered.*?shrek.wang", ""); response.getWriter().write(text); } @Override public void destroy() { } }; 这段代码中为什么destroy方法体是空的