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

网站建设优化解析办公室装修设计方案

网站建设优化解析,办公室装修设计方案,免费制作一个企业网站,网站建设技术文档为什么需要配置springMVC 在Spring Boot中配置Spring MVC,实际上是为了更好地集成和使用Spring框架提供的Web开发功能。 Spring Boot本身是为了简化Spring应用的配置和部署,它内置了一些默认的配置和组件,帮助开发者快速启动应用&#xff0c…

为什么需要配置springMVC

在Spring Boot中配置Spring MVC,实际上是为了更好地集成和使用Spring框架提供的Web开发功能。
Spring Boot本身是为了简化Spring应用的配置和部署,它内置了一些默认的配置和组件,帮助开发者快速启动应用,
而Spring MVC是Spring框架中用于构建Web应用的模块,它提供了一个全面的Web应用架构(包括控制器、视图解析、请求映射等)。

题外话:springMVC的作用

没有springMVC之前,咱们获取前端请求是通过实现servlet接口中的doget dopost实现的,如果你用过springmvc和servlet你是知道servlet是相当麻烦的,而springMVC就是基于servlet简化了我们开发人员的配置,实现解耦。

Spring Boot与Spring MVC的关系

自动配置:在Spring Boot中,当你使用spring-boot-starter-web依赖时,Spring Boot会自动配置Spring MVC相关的组件,包括DispatcherServlet,HandlerMapping,ViewResolver等。你不需要手动配置这些东西,Spring Boot会为你提供合理的默认配置。

自定义配置:虽然Spring Boot会自动配置Spring MVC,但你依然可以根据项目需求进行自定义配置。例如,可以配置自定义的视图解析器、拦截器、格式化程序等,或者使用@Configuration和@EnableWebMvc来进行更精细的控制。

这里我们常常是需要手动配置mvc

实现了 WebMvcConfigurer 接口,并且使用了 @Configuration 注解标注为配置类。它主要用来定制和配置 Spring MVC 的一些行为

@EnableWebMvc
@Configuration
@Slf4j
public class WebMvcConfigurerConfig implements WebMvcConfigurer {@ResourceRouteHandler routeHandler;@Override//该方法用来配置跨域资源共享(CORS)策略。这里的配置允许所有来源的请求访问该服务器,且允许的 HTTP 方法有:GET, POST, PUT, OPTIONS, DELETE, PATCH。//通过 .allowCredentials(true) 允许发送认证信息(如 Cookies)。//.maxAge(3600) 设置了浏览器缓存 CORS 配置的最大时间(单位为秒)。public void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowCredentials(true).allowedOriginPatterns("*").allowedHeaders("*")
//                .allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH").allowCredentials(true).maxAge(3600);}//该方法配置 HTTP 消息转换器,用于 HTTP 请求和响应的序列化与反序列化。
//ObjectMapper:用来配置 Jackson 的对象映射器,能够自定义 JSON 的序列化和反序列化行为。
//通过 simpleModule.addSerializer(Long.class, ToStringSerializer.instance) 让 Long 类型数据在转换时变成字符串。
//设置时区为 Asia/Shanghai。
//FAIL_ON_UNKNOWN_PROPERTIES 设置为 false,即在 JSON 反序列化时,遇到实体类中不存在的字段不会抛出异常。
//向 converters 列表中添加了 ByteArrayHttpMessageConverter、MappingJackson2HttpMessageConverter(处理 JSON 数据)和 StringHttpMessageConverter(处理字符串数据)。@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {ObjectMapper objectMapper = new ObjectMapper();CustomizedModule simpleModule = new CustomizedModule();simpleModule.addSerializer(Long.class, ToStringSerializer.instance);simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);objectMapper.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));objectMapper.registerModule(simpleModule);//实体中不存在的字段反序列化时不抛出异常objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);converters.add(new ByteArrayHttpMessageConverter());converters.add(new MappingJackson2HttpMessageConverter(objectMapper));converters.add(new StringHttpMessageConverter());//ByteArrayHttpMessageConverter must precede MappingJackson2HttpMessageConverter}//该方法用来配置路径匹配规则。
//AntPathMatcher 设置了路径匹配模式,setCaseSensitive(false) 表示路径匹配不区分大小写。
//setUseTrailingSlashMatch(true) 表示匹配路径时会忽略末尾的斜杠。@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {AntPathMatcher pathMatcher = new AntPathMatcher();pathMatcher.setCaseSensitive(false);configurer.setPathMatcher(pathMatcher);configurer.setUseTrailingSlashMatch(true);}//该方法用来注册拦截器(Interceptor),它会拦截 HTTP 请求并可以进行处理前后的逻辑操作。//通过 SaInterceptor 配置了一个拦截器,使用了 SaRouter 来进行路由匹配和权限验证,确保某些路径需要特定的权限或认证。//notMatch() 方法配置了不需要拦截的路径,比如登录接口等。//check(routeHandler.check(handler)) 表示在处理请求时会执行 routeHandler 中的 check 方法来验证路由。//addPathPatterns("/**") 表示所有路径都需要通过此拦截器进行处理。//excludePathPatterns() 方法列出了不需要拦截的路径。@Overridepublic void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(authenticationInterceptor()).addPathPatterns("/**");
//        registry.addInterceptor(actionPermissionInterceptor()).addPathPatterns("/**");registry.addInterceptor(new SaInterceptor(handler -> SaRouter.notMatch("/v1/auth/login","/biz.payment/v1/auth/login").check(routeHandler.check(handler)))).addPathPatterns("/**").excludePathPatterns("/error","/swagger-ui/**","/v3/api-docs/**","/v1/allinPay/callback/**" // 通联支付回调地址);WebMvcConfigurer.super.addInterceptors(registry);}
}

对于addInterceptors的补充

HTTP 请求


是否匹配 excludePathPatterns? ➔ 是 ➔ 不触发拦截器(直接放行)
│ 否

进入 SaInterceptor 逻辑


是否匹配 SaRouter.notMatch()? ➔ 是 ➔ 跳过 check() 逻辑
│ 否

执行 check() 鉴权逻辑

下面是自己定义的check鉴权逻辑

    public SaFunction check(Object handler) {return () -> {//检测是否是通过运营平台调用的if (!checkPlatformAuthentication(handler)) {checkAuthentication(handler);}};}/*** 检测是否通过运营平台调用* 并校验是否登录* @param handler MethodHandler*/public boolean checkPlatformAuthentication(Object handler) {HttpServletRequest request = ServletUtils.getRequest();String authorization = request.getHeader(HttpHeaderConstant.AUTHORIZATION);if (StringUtils.isNotBlank(authorization)) {String[] split = authorization.split("-");if (split.length < 3) {throw ExFactory.bizException(PaymentError.INVALID_LOGIN);}String token = split[0];String identityType = split[1];String tenantId = split[2];if (StringUtils.isBlank(token) || StringUtils.isBlank(identityType) || StringUtils.isBlank(tenantId)) {throw ExFactory.bizException(PaymentError.INVALID_LOGIN);}//根据传入的token找出用户账号idString loginXAuthTokenKey = TokenRedisKeyPrefixConstant.AUTHORIZATION + token;String accountId = redisUtil.get(loginXAuthTokenKey);if(StringUtils.isBlank(accountId)){throw ExFactory.bizException(PaymentError.UN_LOGIN);}//验证通过了,则对token做延时操作Calendar calendar = new GregorianCalendar();calendar.setTime(Date.from(Instant.now()));calendar.add(Calendar.MINUTE, expireMinutes);Date dateAdd = calendar.getTime();redisUtil.expireAt(loginXAuthTokenKey, dateAdd);redisUtil.expireAt(TokenRedisKeyPrefixConstant.AUTHORIZATION_CURRENT_LOGIN_USER + accountId, dateAdd);return true;}return false;}private void checkAuthentication(Object handler) {//检测是否登录StpUtil.checkLogin();//权限校验String path = SaHolder.getRequest().getRequestPath();permissionService.checkPermission(path);//续期timeoutStpUtil.renewTimeout(timeout);}

这里的check是我们自己定义的校验逻辑

http://www.dtcms.com/wzjs/800729.html

相关文章:

  • 黄石做网站公司做网站销售说辞
  • 网站更换备案号资讯是做网站还是公众号
  • 南县网站建设推荐店铺logo一键生成器
  • 网站会员模板公司网站开发费分录是
  • 网站菜单实现原理如何查询网站快照
  • 一个网站的年维护费如何做好一名销售
  • 美食教做网站邯郸做网站服务商
  • 怎样才能建一个网站手机做网站的步骤
  • 编写网站程序知名网络公司有哪些
  • 甘肃省级建设主管部门网站百度推广课程
  • 网站营销网站营销推广建设网站报价表
  • 织梦网站名称用wordpress做的商城
  • 做个商城网站要多少钱品牌建设的基本原则
  • 网站嵌入jswordpress静态首页怎么编辑
  • 云南省城乡建设厅网站postgresql wordpress
  • 织梦搬家 网站空白网站开发设计需求
  • 怎么做p2p网站做美容行业的网站哪个好
  • 网站制作英文版网站使用阿里云部署wordpress
  • 建设网站的个人心得宝安设备网站设计
  • 整站优化系统昆明建设网站的公司
  • 做起点说网站的服务器多少钱建设官方网站的好处和坏处
  • 海口专业的网站开发找工作哪个网站好58同城
  • 杨浦做网站金融网站建设方案ppt模板
  • 长春网站优化咨询wordpress标签数据库
  • 网站排名优化工具做网站 商标分类
  • 横岗网站建设汽车之家网页版跳极速版
  • 网站用哪种语言网站开发公司怎么查
  • 免费的个人的网站随申行的导航是什么导航
  • 遵义网站开发公司短视频营销策略有哪些
  • 四合一网站如何注销网站备案负责人