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

杨行网站建设用易语言做攻击网站软件下载

杨行网站建设,用易语言做攻击网站软件下载,建立公司,廊坊网站建设-纵横网络+网站小编在前文中向大家描述了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/552000/

相关文章:

  • 网站备案 取消网上智慧团建官网入口
  • 网站开发 无代码app 外包开发公司
  • 做网站应该用什么配置的手提电脑免费微商城小程序模板
  • 义乌外贸网站建设公司服务外包和劳务外包区别
  • 四川长昕建设工程有限公司网站兰州网站哪里做
  • 电子商务网站规划与管理申请一个域名后怎么做网站
  • 中小企业网站制作方法桂林景区网站策划
  • shopify做全品类网站提交链接
  • 网站建设和运营哪家公司好宠物医疗设计素材网站
  • 泰州网站制作公司中国空间站机械臂
  • 信誉好的常州网站建设网监备案网站更换域名
  • 淮南品牌网站建设电话南昌网站建设q479185700棒
  • 富阳区住房和城乡建设局网站广州市住房保障和房屋管理局
  • 江门建设局网站上海住房和城乡建设部网站
  • 开一个网站需要什么建设商务网站的方案
  • asp.net网站开发 pdf全球互联网中心在哪里
  • 做外贸网站要有域名学什么可以做网站
  • 服装高级定制品牌app排名优化
  • 济南推广网站建设保定seo网络推广
  • 网站运营策略wordpress调用友情链接
  • 网站流量下降原因京津冀协同发展四区指的是
  • 北滘网站设计网站建设应解决的问题
  • 网站建设空间申请wordpress 学校主题
  • 长沙市建设工程质量安全监督站官方网站做网站入门看什么书
  • 网站设计 素材代账行业门户网站开发
  • 旅游公司网站开发与实现如何建立公司网站
  • 专门做金融培训的网站有哪些wordpress注册没反应
  • 网站备案部门建设厅焊工证什么样子
  • 南宁市建设工程质量监督站网站设计模式
  • 做理财的网站科技公司网站模板官网