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

网站没有做适配 怎么办本地生活网

网站没有做适配 怎么办,本地生活网,云开发布道师,建设英文网站多少钱目录 一、实现用户登录校验 实现自定义拦截器 将自定义的拦截器添加到框架的配置中,并且设置拦截的规则 二、实现统一异常处理 三、实现统一数据格式封装 一、实现用户登录校验 在之前的项目中,在需要验证用户登录的部分,每次都需要利…

目录

一、实现用户登录校验

实现自定义拦截器 

将自定义的拦截器添加到框架的配置中,并且设置拦截的规则 

二、实现统一异常处理 

三、实现统一数据格式封装


一、实现用户登录校验

在之前的项目中,在需要验证用户登录的部分,每次都需要利用Session会话信息来进行判断用户是否处于登录状态,那么利用AOP思想可以进行统一处理,首先想到的是利用Spring AOP来进行实现,但是获取Session信息时需要HttpSession会话以及Request对象,这点StringAOP的五大通知都无法实现,并且在实际项目中并不是指定包或者指定类要进行拦截,适用AspectJ表达式就无法满足需求了,因此,就需要Spring拦截器来实现用户的登录的校验。

使用Spring拦截器的步骤:

  1. 实现自定义拦截器,实现Spring中的HandlerInterceptor接口中的preHandler方法。
  2. 将自定义的拦截器添加到框架的配置中,并且设置拦截的规则。

实现自定义拦截器 

重写HandlerInterceptor接口中的preHandler方法,先获取到session对象,判断对象是否为空来判断登录状态,若未登录则自动跳转到登录页面。

@Component
public class LoginIntercept implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//先得到session对象,传入参数为false,表示Session为空时不会自动创建,传入参数为true则反之。HttpSession session = request.getSession(false);if(session != null && session.getAttribute("user") != null){//表示登录成功return true;}//表示未登录,则请求重定向到登录页面response.sendRedirect("/login.html");return false;}
}

将自定义的拦截器添加到框架的配置中,并且设置拦截的规则 

将自定义的拦截器添加到框架的配置中,设置所有页面都要判断登录状态,除了一些指定页面。 

@Configuration
public class AppConfig implements WebMvcConfigurer {@Resourceprivate LoginIntercept loginIntercept;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginIntercept).addPathPatterns("/**").excludePathPatterns("/user/reg").excludePathPatterns("/user/login").excludePathPatterns("/**/*.css").excludePathPatterns("/**/*.js").excludePathPatterns("/**/*.jpg").excludePathPatterns("/**/*.png");}
}

userController类的内容如下:

RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/login")public boolean login(HttpServletRequest request, String userName, String password){if(StringUtils.hasLength(userName) && StringUtils.hasLength(password)){if(userName.equals("zhangsan") && password.equals("1234")){HttpSession session = request.getSession();session.setAttribute("user","user");return true;}}return false;}@RequestMapping("/test")public boolean test(){return true;}
}

 那么访问test页面时就会出现:

此时就会进行拦截,并且重定向到登录页面。

二、实现统一异常处理 

 统一异常处理使用的是@ControllerAdvice注解,在方法前使用@ExceptionHandler注解,其中的参数为捕捉的异常类.class。

@RestControllerAdvice //表示当前处理异常的页面返回的是数据
public class MyExceptionAdvice {@ExceptionHandler(NullPointerException.class)public HashMap<String,Object> nullPointException(NullPointerException e){HashMap<String,Object> res = new HashMap<>();res.put("data",-1);res.put("state",-1);res.put("msg",e.getMessage());return res;}
}

那么访问一个空指针异常的页面:

    @RequestMapping("/test")public boolean test(){Object test = null;test.toString();return true;}

进行访问:

 

 但是我们不可能将所有的异常都列举出来,就可以定义一个方法处理所有的异常。 

@ExceptionHandler(Exception.class)public HashMap<String,Object> allException(Exception e){HashMap<String,Object> res = new HashMap<>();res.put("data",-1);res.put("state",-1);res.put("msg",e.getMessage());return res;}

三、实现统一数据格式封装

对数据进行统一的格式封装,给当前类添加@Controller注解,实现ResponseBodyAdvice接口,并重写其方法。

@RestControllerAdvice
public class MyResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;//返回true则表示对之前的数据进行重写,才会调用下面的beforeBodyWrite方法,若传入false则反之。}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {//此处也可以设置为别的格式HashMap<String,Object> res = new HashMap<>();res.put("data",body);res.put("state",1);res.put("msg","");return res;}
}

UserController类的test方法如下: 

@RequestMapping("/test")public String test(){return "hello";}

访问test:

 也可以设置为别的数据格式:

@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {//此处也可以设置为别的格式return body;}

再次访问:

 

http://www.yayakq.cn/news/416189/

相关文章:

  • 云盘网站建设wordpress邮件设置密码
  • 吉林网站制作选择乐云seowordpress wp大学
  • 免费网站空间和域名凡科网站建站后 怎么编辑自己的代码源
  • 网站托管服务协议wordpress 下载选择
  • 怎样做28网站代理关于二手书的网站开发ppt
  • 广州市网站建设科技什么浏览器可以进黄页zol问答
  • 岳溥庥网站建设怎么查看网站服务器位置
  • 新塘网站建设郑州专业网站建设公司首选
  • 网页设计网站建设专业现状国内设计公司前十名
  • 海南省住房和城乡建设厅网站网上版html网页制作模板代码免费
  • 陕西建设执业注册中心网站安徽手机网站建设
  • 文化类网站的前置审批网页设计教学网站
  • 上海专业高端网站建设服务义乌网图科技有限公司怎么样
  • 手机网站开发+图库类如何做网站推广资料
  • 总工会网站建设方案在线海报生成
  • 成都成华区建设局官方网站品牌运营管理公司
  • 电影网站怎么建设定制网站建设公司价格
  • 旅游网站建设技术有哪些方面专业的集团网站设计网络
  • html怎么做网站php 资讯网站
  • asp php jsp网站开发人工智能
  • 做电影网站如何赚钱四川建设网上班时间
  • 和网站合作有哪些活动可以做国内ip地址 免费
  • 网站建设需要什么教材网站架构分析怎么写
  • 沙发网站建设wordpress 专题页面
  • 专业北京网站建设公司排名网络营销服务有限公司
  • 网站没有域名设计师工作室
  • 平稳有序推进网站建设免费域名空间哪个好
  • 免费申请个人网站云南建设局网站首页
  • 外贸建站用什么服务器政务网站设计方案
  • 推广项目网站济源新站seo关键词排名推广