这期主要学习了一些网页安全问题:路由守卫,jwt的使用。经过这一周期的学习,我可以初步做出一个信息较安全,有基础防御措施的网页
解决问题:首先
学了一些请求,与跨域相关的问题,主要研究了option请求的作用,以及如何阻止他对于token令牌获取的干扰这一问题。
首先option请求用于跨域资源共享,当发出跨域Ajax请求时,浏览器会自动发送Option请求,以检查是否允许实际请求。但是这一请求中不能附带一些额外的参数。比如token,这会使系统在进行jwt检测的时候直接报错“token已经失效”,因为没有接收到一个正常的token。当引入下面代码时,可跨过option请求,直接对getpost这类请求进行审核
@Configuration public class corsConfig { @Bean public CorsFilter corsFilter(){ UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration=new CorsConfiguration(); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addAllowedOrigin("*"); source.registerCorsConfiguration("/**",corsConfiguration); return new CorsFilter(source); } }
下面这段函数是添加一个阻断器,在使其每次发生请求变化时都要进行jwt检测。当然,并不是所有指令都需要这种检测,后续加上一些可以不进行检测的url
@Override public void addInterceptors(InterceptorRegistry reg){ reg.addInterceptor(jwtInterceptor).addPathPatterns("/anqi/**") .excludePathPatterns("/anqi/admin/login") .excludePathPatterns("/anqi/admin/register") .excludePathPatterns("/anqi/files/**") .excludePathPatterns("/anqi/files/**"); }
下面这段函数是一段是jwt过程中token的验证,这次我将token放在header中,以便于提取使用
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler){ // if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { // System.out.println("OPTIONS请求,放行"); // return true; // } //1.获取token System.out.println(request.getHeader("token")); String token=request.getHeader("token"); if(StrUtil.isBlank(token)){ //第一次没拿到 去参数里面拿 比如 /anqi/admin?token=xxx System.out.println("token没拿到"); token=request.getParameter("token"); } //2.开始认证 if(StrUtil.isBlank(token)){ throw new CustomException("token已经消失,请重新登录"); } //获取token中的id String adminID; Admin admin; try{ adminID= JWT.decode(token).getAudience().get(0); admin=adminMapper.findByID(Integer.parseInt(adminID)); }catch (Exception e){ String msg="token认证失败"; log.error(msg+",token="+token,e); throw new CustomException(msg); } if(admin==null){ throw new CustomException("用户不存在请重新登录"); } try{ //用户密码加签验证token JWTVerifier jwtVerifier=JWT.require(Algorithm.HMAC256(admin.getPassword())).build(); jwtVerifier.verify(token); }catch (JWTVerificationException e){ throw new CustomException("token验证失败请重新登录"); } log.info("token验证成功"); return true; }
关于如何设置token:为了节省数据库的查询空间,在进行登录时会生成对应的token与用户信息一起存储在localstorage中,一旦信息遭到破坏,上面的阻断器就会生效阻止用户继续访问页面
标签:10,请求,corsConfiguration,23,admin,软工,anqi,token,new From: https://www.cnblogs.com/kun1790051360/p/17755574.html