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

如何零基础学编程优化搜狐的培训

如何零基础学编程,优化搜狐的培训,wordpress移动顶部菜单,dw网页设计代码编写小编在前文中向大家描述了Spring AOP的相关内容#xff1a;Spring AOP-CSDN博客感兴趣的各位老铁可查看一下#xff01;#xff01; 那么#xff0c;我们本文主要是代理搭建来实现一个Spring Boot统一功能处理模块了#xff0c;当然#xff0c;这个也是Spring AOP的实战环… 小编在前文中向大家描述了Spring AOP的相关内容Spring AOP-CSDN博客感兴趣的各位老铁可查看一下 那么我们本文主要是代理搭建来实现一个Spring Boot统一功能处理模块了当然这个也是Spring AOP的实战环节因此不知道Spring AOP是啥的铁汁请先看一下前篇博客Spring AOP-CSDN博客做一个简单了解在来研究本文内容 本文要实现的目标大概有3个 统一用户登录权限验证统一数据格式返回统一异常处理 用户登录权限校验 用户登录权限的发展从之前每个方法中自己验证用户登录权限到现在统一的用户登录验证处理它是一个逐渐完善和逐渐优化的过程。 最初的用户登录验证 RestController RequestMapping(/user) public class User1Controller {/*** 某方法1* param request* return*/RequestMapping(/m1)public Object method(HttpServletRequest request){//有session就获取没有不会创建HttpSession sessionrequest.getSession(false);if (session ! null session.getAttribute(userinfo) ! null){//说明已经登录业务处理return true;}else {//未登录return false;}}/*** 某方法2* param request* return*/RequestMapping(/m2)public Object method2(HttpServletRequest request){//有session就获取没有不会创建HttpSession sessionrequest.getSession(false);if (session ! null session.getAttribute(userinfo) ! null){//说明已经登录业务处理return true;}else {//未登录return false;}}/*** 其他方法*/ }从上述代码可以看出每个⽅法中都有相同的⽤户登录验证权限它的缺点是 每个⽅法中都要单独写⽤户登录验证的⽅法即使封装成公共⽅法也⼀样要传参调⽤和在⽅法中进⾏判断。添加控制器越多调⽤⽤户登录验证的⽅法也越多这样就增加了后期的修改成本和维护成本。这些⽤户登录验证的⽅法和接下来要实现的业务⼏何没有任何关联但每个⽅法中都要写⼀遍。 所以提供⼀个公共的 AOP ⽅法来进⾏统⼀的⽤户登录权限验证迫在眉睫 Spring AOP用户统一登录验证的问题 说到统一的用户登录验证我们想到的第一个方案是Spring AOP前置通知或者环绕通知来实现具体的实现代码如下 Aspect Component public class User1Aspect {//定义切点方法controller包下子孙包下所有类的所有方法Pointcut(execution(* com.example.demo.Controller..*.*(..)))public void pointcut(){//空方法}//前置方法Before(pointcut())public void doBefore(){}//环绕方法Around(pointcut)public Object doAround(ProceedingJoinPoint joinPoint){Object objnull;System.out.println(Around方法开始执行);try {///执行拦截方法objjoinPoint.proceed();} catch (Throwable e) {e.printStackTrace();}System.out.println(Around方法执行结束);return obj;}}如果要在以上 Spring AOP 的切⾯中实现⽤户登录权限效验的功能有以下两个问题 没办法获取到 HttpSession 对象。我们要对⼀部分⽅法进⾏拦截⽽另⼀部分⽅法不拦截如注册⽅法和登录⽅法是不拦截的这样的话排除⽅法的规则很难定义甚⾄没办法定义。 那么这个问题该如何解决呢 Spring拦截器 对于以上问题Spring中提供了具体的实现拦截器HandlerInterceptor拦截器的实现分为以下两个步骤 自定义拦截器实现HandlerInterceptor接口的preHandle执行具体方法之前的预处理方法将自定义拦截器加入WebMvcConfigurer的addInterceptors方法中 那么有了上述的两个步骤我们便可以自定义拦截器了 1.自定义拦截器 接下来使用代码来实现一个用户登录的权限校验自定义拦截器是一个普通类具体的实现代码如下 Component //注入Spring框架中 public class loginInterceptor implements HandlerInterceptor {//调用目标方法之前执行的方法//此方法返回Boolean类型的只若返回true表示拦截器验证成功继续走后续流程执行目标方法// 若返回false表示拦截器执行失败后续流程和目标方法都不要在执行了Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{//用户登录判断业务HttpSession sessionrequest.getSession(false);if (session ! null session.getAttribute(session_userinfo) !null){//getAttribute用户的身份信息//用户已经登录return true;}// response.sendRedirect(https://www.baidu.com);//sendRedirect跳转//response.setStatus(401);//401没有权限response.setContentType(application/jsoncharsetutf8);//指定字符集为utf8// response.setCharacterEncoding(utf8);response.getWriter().println({\code\:-1,\msg\:\登录失败\,\data\:\\});//getWriter()拿到输出流//code状态码//msg报错信息//另一种方式使用ObjectMapper给这个对象里面设置属性然后再将JSON对象转化为字符串就OK了return false;} }2.将自定义拦截器加入到系统配置 将上一步中的自定义拦截器加入到系统配置信息中具体实现代码如下 Configuration public class WebMvcConfigurer implements org.springframework.web.servlet.config.annotation.WebMvcConfigurer {Autowiredprivate loginInterceptor loginInterceptor;//自定义拦截器Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(loginInterceptor) //将自定义的拦截器添加到系统配置项中.addPathPatterns(/**) //拦截所有Url.excludePathPatterns(user/login)//排除url/user/login不拦截.excludePathPatterns(user/reg).excludePathPatterns(/image/**);//排除image文件夹下所有文件} }其中 addInterceptor表示需要拦截的URL“**”表示拦截任意方法也就是所有方法 excludePathPatterns表示需要排除的URL 说明以上的拦截规则可以拦截此次昂木中的使用的URL包括静态文件图片文件JS和CSS等文件 练习 登录注册页面不拦截其他页面都拦截当登录成功写入session之后拦截的页面可正常访问 统一异常处理 统一异常处理使用的是ControllerAdvice ExceptionHandler来实现的ControllerAdvice表示的是控制器通知类ExceptionHandler是异常处理器两个结合表示当出现异常的时候执行某个通知也就是执行某个方法事件。 创建一个异常处理类 ControllerAdvice //作用随着Spring的启动而启动接收Controller中的异常 public class MyExceptionAdvice {} 创建异常检测的类和处理业务方法 ControllerAdvice //作用随着Spring的启动而启动接收Controller中的异常 ResponseBody public class MyExceptionAdvice {//处理空指针异常ExceptionHandler(NullPointerException.class)// ExceptionHandler异常管理器 NullPointerException.class空指针异常public HashMapString ,Object doNullPointExcepyion(NullPointerException e){ //企业中不允许这样写//e异常种类HashMapString,Object resultnew HashMap();result.put(code,-300);//状态码result.put(msg,空指针e.getMessage());//状态描述信息result.put(data,null);//异常的详细信息return result;}//默认的异常处理当具体的异常匹配不到时会执行此方法ExceptionHandler(Exception.class)//Exception.class所有异常的父类public HashMapString,Object doException(Exception e){HashMapString,Object resultnew HashMap();result.put(code,-300);result.put(msg,Exception:e.getMessage());//e.getMessage()异常的详细信息result.put(data,null);return result;} }统一数据返回格式的实现强制性统一数据返回在返回数据之前进行数据重写 统一数据返回格式可以用ControllerAdvice ResponseBodyAdvice的方式实现 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {Autowiredprivate ObjectMapper objectMapper;//是否执行beforeBobyWrite方法true执行重写返回结果Overridepublic boolean supports(MethodParameter returnType,Class converterType){return true;}//返回数据之前进行数据重写OverrideSneakyThrowspublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType,ServerHttpRequest request, ServerHttpResponse response) {//规定标准返回格式//HashMapString,Object--code msg data//判断是否为统一的数据格式if (body instanceof HashMap) {//判断body的类型是否为HashMapreturn body;}//重写返回结果让其返回一个统一的数据格式HashMapString,Object resultnew HashMap();result.put(code,200);result.put(data,body);result.put(msg, );//状态码的描述if (body instanceof String){//返回一个将对象转化为JSON String字符串return objectMapper.writeValueAsString(result);//一样的写法//return {\code\:200,\msg\:\,\data\:\body\};//在统一数据重写时单独处理String类型让其返回一个Spring字符串而非HashMap}return result;} }综合练习用户登录拦截器 实现注册和登录功能添加统一的错误处理ControllerAdvice添加登录拦截器 WebMvcConfigurer HandlerInterceptor用户登录之后能到欢迎页面未登录直接跳到登录页面添加统一的返回格式包含status,data,msg等字段 为什么需要统一数据返回格式 方便前端程序员更好的接收和解析后端接口返回的数据降低前端程序员和后端程序员的沟通成本按照某个格式实现就OK了因为所有接口都是这样返回的有利于项目统一数据的维护和修改有利于后端技术部门的统一规范的标准的指定不会出现稀奇古怪的内容………………
http://www.pierceye.com/news/819585/

相关文章:

  • 网站建设步骤 文档富阳做网站洛洛科技
  • 列举网站建设的SEO策略广东建设行业招聘 什么网站
  • 免费社区建站系统seo是指什么
  • 网站建设实训的认识小企业网站建设哪里做得好
  • 无锡seo网站排名优化牟平建设企业网站
  • 网络营销好找工作吗成都seo优化公司排名
  • 网站换关键词山西网站备案
  • 网站微信建设运维经验深圳罗湖企业网站
  • 国外设计类网站泰安网网站建设
  • 做暖暖小视频网站手机 dns 国外网站
  • 子网站建设工作网站 首页布局 seo
  • 网站域名是什么传奇辅助网站怎么做
  • 在那个上面做网站都能搜到新乡网站建设设计
  • 网站编辑 seo是什么 百度知道本地网站搭建流程
  • 用凡科做网站好吗搜索自媒体平台
  • 学设计的网站有哪些内容免费设计图片软件
  • 柳州建站公司404错误直接转向到网站首页
  • 字画网站建设iis怎么查看网站的域名
  • 公司门户网站建设特点新增专业建设规划
  • 备案号怎么放置到网站长春如何建立一个平台网站
  • 企业网站的一般要素包括厂房设计
  • 郑州做网站 汉狮网络深圳市中心是哪个区
  • jsp做的婚恋网站做死活题网站
  • 帮做网站的公司荥阳网站优化公司
  • 网页设计心得体会正文合肥网站推广优化公司
  • 邯郸菜鸟网站建设网站搭建费用价格表
  • 网站优化3个关键词和10个关键词的区别品牌推广方式有哪些
  • 建立网站需要多少钱一个二手站网站怎做
  • 瑞丽住建局网站科技新闻最新消息10条
  • 可以上传网站的免费空间网站注册都需要什么