当前位置: 首页 > news >正文

SpringSecurity 实现token 认证

  • 配置类

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled=true)
    public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();
    }// 由于过滤器 比 servelt 先加载 在这里注入一下 负责  TokenAuthenticationTokenFilter 中redisuntity 
    @Bean
    public TokenAuthenticationTokenFilter getTokenFiter(){return new TokenAuthenticationTokenFilter();
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {//http.addFilterBefore(new VerCodeFi    lter("/Login/Login"), UsernamePasswordAuthenticationFilter.class);http.addFilterBefore(getTokenFiter(), UsernamePasswordAuthenticationFilter.class);http.authorizeRequests().antMatchers("/Login/**").permitAll() // 放行Login.anyRequest().authenticated() // 所有请求都需要验证.and().formLogin() // 使用默认的登录页面.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().csrf().disable();// post请求要关闭csrf验证,不然访问报错;实际开发中开启,需要前端配合传递其他参数
    }
    

    }

  • 定义token 验证过滤器

    public class TokenAuthenticationTokenFilter extends OncePerRequestFilter {

    @Autowired
    private RedisUtils redisUtils;public TokenAuthenticationTokenFilter(){
    }@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {//1、获取请求头携带的tokenString token = request.getHeader("token");if(!StringUtils.hasText(token)){//不需要token的路由可以直接放行filterChain.doFilter(request,response);return;}Object o =redisUtils.get(token);if (o==null){response.setStatus(200);response.setCharacterEncoding("utf-8");response.getWriter().write(JSON.toJSONString(Result.failed(401,"token 非法","")));return;}Map<String,String> maps=new HashMap<>();Map Values = JSON.parseObject(o.toString(), maps.getClass());Collection<GrantedAuthority> authorities = new ArrayList<>();authorities.add(new SimpleGrantedAuthority(Values.get("role").toString()));UsernamePasswordAuthenticationToken authenticationToken=new UsernamePasswordAuthenticationToken(new Userdto(), null, authorities);SecurityContextHolder.getContext().setAuthentication(authenticationToken);filterChain.doFilter(request,response); //放行
    }
    

    }

http://www.lryc.cn/news/544968.html

相关文章:

  • 轻松实现语音生成:GPT-SoVITS V2整合包的远程访问操作详解
  • 解锁状态模式:Java 编程中的行为魔法
  • 算法与数据结构(相交链表)
  • 浅入浅出Selenium DevTools
  • 软件工程---净室软件工程
  • OpenHarmony图形子系统
  • 如何获取Mac OS 安装盘
  • 【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点
  • 大白话前端性能优化方法的分类与具体实现
  • Rabbit MQ 高频面试题【刷题系列】
  • ES6 特性全面解析与应用实践
  • 有关数据库表的冗余字段
  • 知识图谱补全KGC
  • 独立开发者的内容营销教程
  • Mysql——约束与多表查询
  • DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順
  • Unity 运用正则表达式保留字符串中的中文英文字母和数字
  • vue el-table-column 单元表格的 省略号 实现
  • 企业微信里可以使用的企业内刊制作工具,FLBOOK
  • 【数据挖掘】Pandas
  • explore与explode词源故事
  • CAM350_安装
  • 51c自动驾驶~合集22
  • games101 作业5
  • 【高并发秒杀系统设计:从Guava到Redis的6级缓存架构演进】
  • 2-程序语言基础知识
  • 【AIGC系列】4:Stable Diffusion应用实践和代码分析
  • 小米火龙CPU和其他几代温度太高的CPU是由谁代工的
  • 在 ASP.NET Core 中压缩并减少图像的文件大小
  • 网络流算法: Dinic算法