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

网站icp备案证明文件idea做网站登录

网站icp备案证明文件,idea做网站登录,唐山的网站建设,简单房地产网站1. AOP存在的问题 获取参数复杂AOP的规则相对简单 2. 拦截器 2.1. 应用(以登录为例) 2.1.1. 自定义拦截器 新建interceptor文件夹 import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http…1. AOP存在的问题 获取参数复杂AOP的规则相对简单 2. 拦截器 2.1. 应用(以登录为例) 2.1.1. 自定义拦截器 新建interceptor文件夹 import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;Component public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//判断是否登录HttpSession session request.getSession(false);if (session!null session.getAttribute(username)!null){//通过return true;}else {//没登录response.setStatus(401);return false;}} } 2.1.2. 将自定义拦截器加入到系统配置 新建config文件夹 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import springaop.interceptor.LoginInterceptor;Configuration public class AppConfig implements WebMvcConfigurer {Autowiredprivate LoginInterceptor loginInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns(/**) ///**表示拦截所有.excludePathPatterns(/user/login) //除了登录.excludePathPatterns(/user/reg); //除了注册} } 2.1.3. 业务代码 import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;Slf4j RequestMapping(/user) RestController public class UserController {//获取用户信息RequestMapping(/getInfo)public String getInfo(){log.info(log.getInfo);return get info...;}//注册RequestMapping(/reg)public String reg(){log.info(log.reg);return reg...;}//登录RequestMapping(/login)public boolean login(HttpServletRequest request,String username,String password){log.info(log.login);//判断username和password是否为空 // if (username!null username.equals() password!null password.equals()){ // // // }if (!StringUtils.hasLength(username) || !StringUtils.hasLength(password)){return false;}if (!admin.equals(username) || !admin.equals(password)){return false;}HttpSession session request.getSession(true);session.setAttribute(username,username);return true;} } 2.2. 排除所有静态资源方法 方法1 registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**) // 拦截所有接口.excludePathPatterns(/**/*.js).excludePathPatterns(/**/*.css).excludePathPatterns(/**/*.jpg).excludePathPatterns(/login.html).excludePathPatterns(/**/login); // 排除接口 方法2 private final ListString excludePaths //注意List的这种方式的初始化赋值不允许再追加元素Arrays.asList(/**/*.html,blog-editormd,/css/**,/js/**,/pic/**,/user/login,/user/res);Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns(/**).excludePathPatterns(excludePaths);} 2.3. 实现原理 2.3.1. 总体思路 2.3.2. 部分源码分析 拦截器是基于AOP实现的 (AOP基于动态代理(JDK|CGLIB)) 3. 统一功能处理 3.1. 统一登录处理 参考上一节 拦截器的应用 3.2. 统一异常处理 对于下面的异常, 我们在访问页面的时候,不希望让用户看到 import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/exception) public class ExceptionController {//算数异常RequestMapping(/test1)public boolean test1(){int a 10/0;return true;}//空指针异常RequestMapping(/test2)public boolean test2(){String str null;System.out.println(str.length());return true;}//手动异常RequestMapping(/test3)public boolean test3(){throw new RuntimeException(手动异常);} } 可能出现的问题: 类上面的RequestMapping(/ex)访问的时候会有未知的问题,改成RequestMapping(/exception)比较好 3.2.1. 配置ErrorHandler 针对不同的异常,进行不同的操作 import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;Slf4j ControllerAdvice ResponseBody public class ErrorHandler {ExceptionHandlerpublic Object error(Exception e){HashMapString,Object result new HashMap();log.info(内部异常:,e);result.put(success,0);result.put(code,-1);result.put(msg,内部异常);return result;}ExceptionHandlerpublic Object error(ArithmeticException e){HashMapString,Object result new HashMap();log.info(算数异常:,e);result.put(success,0);result.put(code,-2);result.put(msg,算术异常);return result;}ExceptionHandlerpublic Object error(NullPointerException e){HashMapString,Object result new HashMap();log.info(空指针异常:,e);result.put(success,0);result.put(code,-3);result.put(msg,空指针异常);return result;} } 3.2.1.1. 可能会遇到的问题 ①写完代码访问的时候,会是错误404, 而且异常是返回的不是一个视图, 需要添加ResponseBody注解,让程序意识到返回的就是数据, 而不是视图 ②分辨不出来异常 之前在切面的Around环绕通知里有一段代码 要是遇到了异常都会抛出RuntimeException, 从而掩盖了真正的异常, 需要改成下面的样子, 抛出真正的异常 3.3. 统一数据返回格式 3.3.1. 好处 统一数据返回格式的优点有很多. 比如以下几个: 方便前端程序员更好的接收和解析后端数据接口返回的数据降低前端程序员和后端程序员的沟通成本按照某个格式实现就行了因为所有接口都是这样返回的有利于项目统一数据的维护和修改有利于后端技术部门的统一规范的标准制定不会出现稀奇古怪的返回内容 3.3.2. 代码 新建ResponseHandler import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import java.util.HashMap;ControllerAdvice public class ResponseHandler implements ResponseBodyAdvice {Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true; //一定要改成true}SneakyThrowsOverridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {HashMapString,Object result new HashMap();result.put(success,1);result.put(data,body);result.put(errMsg,);//对字符串进行特殊处理if (body instanceof String){ObjectMapper mapper new ObjectMapper();return mapper.writeValueAsString(result);}return result;} } 添加这段代码之前, 访问成功了,得到的是true, 加上这段代码就变成了{data:true,success:1,errMsg:} 3.3.2.1. 可能出现的问题 ①supports()的返回值一定要改成true ②getInfo()的业务代码的返回值是String, 会引发java.util.HashMap cannot be cast to java.lang.String错误. 由于内部的数据类型转换问题导致, 解决方法是加一步验证. 这段代码会有异常, 用SneakyThrows处理. 这个注解的作用就是自动生成一个try-catch, 直接抛出异常
http://www.hkea.cn/news/14259031/

相关文章:

  • 国家工业和信息化部网站备案系统网站违规关键词
  • 厦门市建设局网站住房保障大数据营销的特点
  • 建设工程考试官方网站莱芜信息港金点子招聘
  • ps做网站 大小甘肃省建设厅招标办网站
  • fireworks8做网站wordpress主题 淘宝客
  • 科技广告公司网站模板建设门户网站 业务模板
  • 哪个公司建设网站怎样建设凡科网站
  • 设计必知的设计网站 039苏州适合做网络推广的企业
  • 有做车身拉花的网站吗线上教学网站
  • iis 发布织梦网站wordpress文章发送代码块
  • 怎样自己弄一个网站做网站开发赚钱吗
  • 网站数据库备份还原羽毛球赛事奖金
  • 专门做外国的网站吗WordPress数据库自动切换
  • 龙岩网站制作多少钱网站被墙是谁做的
  • 网站导航的分类有哪些网站建设的工具
  • 拖式网站建设软件站
  • 烟台做网站价格安网需要多少钱
  • 昆山建设局网站最好的网站设计
  • 网站建设管理规定wordpress 帝国 哪个好
  • 北国网seo加盟代理
  • 点击运行显示网站正在建设外贸 推广网站
  • 常州市建设工程质监站网站企业网站排版
  • 中国建设银行上海分行信息网站网络设置的网站
  • 网站建设推广襄樊wordpress ent 主题
  • 怎样做网站地图盐城做网站优化
  • 做网站翻页怎么做遵义网页
  • 电商网站开发实战视频教程wordpress 站外搜索
  • 网站平台推广有哪些html5网站上线模版
  • 为什么网站开发要用架构网站建设与管理专业就业方向
  • 网站维护的协议头条发布视频成功显示404