通辽做网站的公司wordpress 外贸 插件
- 作者: 五速梦信息网
- 时间: 2026年03月21日 08:19
当前位置: 首页 > news >正文
通辽做网站的公司,wordpress 外贸 插件,国内wordpress插件,项目网络图最早开始时间Cookie Cookie 是网络编程中使用最广泛的一项技术#xff0c;主要用于辨识用户身份。 客户端#xff08;浏览器#xff09;与网站服务端通讯的过程如下图所示#xff1a; 从图中看#xff0c;服务端既要返回 Cookie 给客户端#xff0c;也要读取客户端提交的 Cookie。所…Cookie Cookie 是网络编程中使用最广泛的一项技术主要用于辨识用户身份。 客户端浏览器与网站服务端通讯的过程如下图所示 从图中看服务端既要返回 Cookie 给客户端也要读取客户端提交的 Cookie。所以本节课主要学习服务端 Spring 工程是如何使用 Cookie 的有读、写两种操作。 浏览器如何使用 Cookie 在《Java 网络编程》课程中讲解。 读 Cookie 为 control 类的方法增加一个 HttpServletRequest 参数通过 request.getCookies() 取得 cookie 数组。然后再循环遍历数组即可。下列演示代码省略循环代码 系统会自动传入方法参数所需要的 HttpServletRequest 对象哦 import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest;RequestMapping(/songlist) public Map index(HttpServletRequest request) {Map returnData new HashMap();returnData.put(result, this is song list);returnData.put(author, songAuthor);Cookie[] cookies request.getCookies();returnData.put(cookies, cookies);return returnData; }请看代码演示 从浏览器输出结果可以看到打印出了所有的 Cookie 数据。 cookie 有很多属性值各属性值的作用请 点击查看文档 使用注解读取 cookie 如果知道 cookie 的名字就可以通过注解的方式读取不需要再遍历 cookie 数组了更加方便。 为 control 类的方法增加一个 CookieValue(xxxx) String xxxx 参数即可注意使用时要填入正确的 cookie 名字。 系统会自动解析并传入同名的 cookie import org.springframework.web.bind.annotation.CookieValue;RequestMapping(/songlist) public Map index(CookieValue(JSESSIONID) String jSessionId) {Map returnData new HashMap();returnData.put(result, this is song list);returnData.put(author, songAuthor);returnData.put(JSESSIONID, jSessionId);return returnData; }请看代码演示 注意如果系统解析不到指定名字的 cookie使用此注解就会报错。必须谨慎使用。 写 Cookie 同样也很简单。为 control 类的方法增加一个 HttpServletResponse 参数调用 response.addCookie() 方法添加 Cookie 实例对象即可。 系统会自动传入方法参数所需要的 HttpServletResponse 对象哦 import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse;RequestMapping(/songlist) public Map index(HttpServletResponse response) {Map returnData new HashMap();returnData.put(result, this is song list);returnData.put(name, songName);Cookie cookie new Cookie(sessionId,CookieTestInfo);// 设置的是 cookie 的域名就是会在哪个域名下生成 cookie 值cookie.setDomain(youkeda.com);// 是 cookie 的路径一般就是写到 / 不会写其他路径的cookie.setPath(/);// 设置cookie 的最大存活时间-1 代表随浏览器的有效期也就是浏览器关闭掉这个 cookie 就失效了。cookie.setMaxAge(-1);// 设置是否只能服务器修改浏览器端不能修改安全有保障cookie.setHttpOnly(false);response.addCookie(cookie);returnData.put(message, add cookie successful);return returnData; }Cookie 的各个属性的作用注意看代码注释哦 注意Cookie 类的构造函数第一个参数是 cookie 名称第二个参数是 cookie 值。而且其他的属性需要根据实际情况和具体的业务需求决定。 Spring Session API Cookie 放在客户端可以存储用户登录信息主要用于辨识用户身份。 但如果真的把用户ID、登录状态等重要信息放入 cookie会带来安全隐患因为网络上很不安全cookie可能会拦截、甚至伪造。 采用 Session 会话机制可以解决这个问题用户ID、登录状态等重要信息不存放在客户端而是存放在服务端从而避免安全隐患。 使用会话机制时Cookie 作为 session id 的载体与客户端通信。上一节课演示代码中Cookie 中的 JSESSIONID 就是这个作用。 名字为 JSESSIONID 的 cookie是专门用来记录用户session的。JSESSIONID 是标准的、通用的名字。 在了解 Session 与 Cookie 之间的关系后我们来学习如何使用 Session也分为读、写两种操作。 读操作 与 cookie 相似从 HttpServletRequest 对象中取得 HttpSession 对象使用的语句是 request.getSession()。 但不同的是返回结果不是数组是对象。在 attribute 属性中用 key - value 的形式存储多个数据。 假设存储登录信息的数据 key 是 userLoginInfo那么语句就是 session.getAttribute(userLoginInfo)。 登录信息类 登录信息实例对象因为要在网络上传输就必须实现序列化接口 Serializable 否则不实现的话会报错。 登录信息类需要根据具体的需要设计属性字段。下列代码的两个属性仅供演示。 import java.io.Serializable;public class UserLoginInfo implements Serializable {private String userId;private String userName; }操作代码 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;RequestMapping(/songlist) public Map index(HttpServletRequest request, HttpServletResponse response) {Map returnData new HashMap();returnData.put(result, this is song list);// 取得 HttpSession 对象HttpSession session request.getSession();// 读取登录信息UserLoginInfo userLoginInfo (UserLoginInfo)session.getAttribute(userLoginInfo);if (userLoginInfo null) {// 未登录returnData.put(loginInfo, not login);} else {// 已登录returnData.put(loginInfo, already login);}return returnData; }这里实际上取不到数据因为还没有写入。 写操作 假设登录成功怎么记录登录信息到 Session 呢 既然从 HttpSession 对象中读取登录信息用的是 getAttribute() 方法那么写入登录信息就用 setAttribute() 方法。 下列代码演示了使用 Session 完成登录的过程略去了校验用户名和密码的步骤实际项目中需要 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;RequestMapping(/loginmock) public Map loginMock(HttpServletRequest request, HttpServletResponse response) {Map returnData new HashMap();// 假设对比用户名和密码成功// 仅演示的登录信息对象UserLoginInfo userLoginInfo new UserLoginInfo();userLoginInfo.setUserId(12334445576788);userLoginInfo.setUserName(ZhangSan);// 取得 HttpSession 对象HttpSession session request.getSession();// 写入登录信息session.setAttribute(userLoginInfo, userLoginInfo);returnData.put(message, login successful);return returnData; }额外知识点 Cookie 存放在客户端一般不能超过 4kb 要特别注意放太多的内容会导致出错而 Session 存放在服务端没有限制不过基于服务端的性能考虑也不能放太多的内容。 Spring Session 配置 上面学了Session 的操作在操作中没有涉及到 cookie。系统会自动把默认的 JSESSIONID 放在默认的 cookie 中。 但 Cookie 作为 session id 的载体也可以修改属性。 前置知识点配置 第 6 章我们讲了 application.properties 是 SpringBoot 的标准配置文件配置一些简单的属性。同时SpringBoot 也提供了编程式的配置方式主要用于配置 Bean 。 基本格式 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class SpringHttpSessionConfig {Beanpublic TestBean testBean() {return new TestBean();} }在类上添加 Configuration 注解就表示这是一个配置类系统会自动扫描并处理。 在方法上添加 Bean 注解表示把此方法返回的对象实例注册成 Bean。 跟 Service 等写在类上的注解一样都表示注册 Bean。 Session 配置 依赖库 先在 pom.xml 文件中增加依赖库 !– spring session 支持 – dependencygroupIdorg.springframework.session/groupIdartifactIdspring-session-core/artifactId /dependency配置类 在类上额外添加一个注解EnableSpringHttpSession 开启 session 。然后注册两个 bean CookieSerializer读写 Cookies 中的 SessionId 信息MapSessionRepositorySession 信息在服务器上的存储仓库。 import org.springframework.session.MapSessionRepository; import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession; import org.springframework.session.web.http.CookieSerializer; import org.springframework.session.web.http.DefaultCookieSerializer;import java.util.concurrent.ConcurrentHashMap;Configuration EnableSpringHttpSession public class SpringHttpSessionConfig {Beanpublic CookieSerializer cookieSerializer() {DefaultCookieSerializer serializer new DefaultCookieSerializer();serializer.setCookieName(JSESSIONID);// 用正则表达式配置匹配的域名可以兼容 localhost、127.0.0.1 等各种场景serializer.setDomainNamePattern(^.?\.(\w\.[a-z])$);serializer.setCookiePath(/);serializer.setUseHttpOnlyCookie(false);// 最大生命周期的单位是秒serializer.setCookieMaxAge(24 * 60 * 60);return serializer;}// 当前存在内存中Beanpublic MapSessionRepository sessionRepository() {return new MapSessionRepository(new ConcurrentHashMap());} }想必大家已经了解了 Cookie 各属性值的作用这里就不赘述了。 这段代码有些长是 Spring 官方推荐的比较标准的写法点此阅读官方文档。当前的重点是学习如何使用。 Spring Request 拦截器 在上节课的练习中我们模拟了用户登录以及提供了查询登录状态的方法。 在实际的项目中会有大量的页面功能是需要判断用户是否登录的。例如电商的网站订单、购物车、管理收货地址等等都需要登录。那么让每一个页面都判断是否登录、未登录跳转到登录页就太繁琐了也不利于维护。 所以需要一种统一处理相同逻辑的机制Spring 提供了 HandlerInterceptor拦截器满足这种场景的需求。 实现拦截器也不同负责有三个步骤 一、创建拦截器 拦截器必须实现 HandlerInterceptor 接口。可以在三个点进行拦截 Controller方法执行之前。这是最常用的拦截点。例如是否登录的验证就要在 preHandle() 方法中处理。Controller方法执行之后。例如记录日志、统计方法执行时间等就要在 postHandle() 方法中处理。整个请求完成后。不常用的拦截点。例如统计整个请求的执行时间的时候用在 afterCompletion 方法中处理。 请看下列示例代码 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;public class InterceptorDemo implements HandlerInterceptor {// Controller方法执行之前Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 只有返回true才会继续向下执行返回false取消当前请求return true;}//Controller方法执行之后Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}// 整个请求完成后包括Thymeleaf渲染完毕Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {} } preHandle() 方法的参数中有 HttpServletRequest 和 HttpServletResponse可以像 control 中一样使用 Session二、实现 WebMvcConfigurer 创建一个类实现 WebMvcConfigurer并实现 addInterceptors() 方法。这个步骤用于管理拦截器。 注意实现类要加上 Configuration 注解让框架能自动扫描并处理。 管理拦截器比较重要的是为拦截器设置拦截范围。常用 addPathPatterns(/) 表示拦截所有的 URL 。 当然也可以调用 excludePathPatterns() 方法排除某些 URL例如登录页本身就不需要登录需要排除。 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration public class WebAppConfigurerDemo implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {// 多个拦截器组成一个拦截器链// 仅演示设置所有 url 都拦截registry.addInterceptor(new UserInterceptor()).addPathPatterns(/);} }学习拦截器要注意理解和体会 拦截器 与 管理拦截器 分开的思想。思考一下如果不分开处理由拦截器本身决定在什么情况下进行拦截是否更好 通常拦截器会放在一个包例如interceptor里。而用于管理拦截器的配置类会放在另一个包例如config里。 这种按功能划分子包的方式可以让阅读者比较直观、清晰的了解各个类的作用。
- 上一篇: 通辽网站制作济南开发网站
- 下一篇: 通辽做网站建设dedecms网站地图模板怎么
相关文章
-
通辽网站制作济南开发网站
通辽网站制作济南开发网站
- 技术栈
- 2026年03月21日
-
通化建设工程信息网站官方网站建设ppt
通化建设工程信息网站官方网站建设ppt
- 技术栈
- 2026年03月21日
-
通过网站如何做海外贸易源码网站跟自己做的网站区别
通过网站如何做海外贸易源码网站跟自己做的网站区别
- 技术栈
- 2026年03月21日
-
通辽做网站建设dedecms网站地图模板怎么
通辽做网站建设dedecms网站地图模板怎么
- 技术栈
- 2026年03月21日
-
通辽做网站制作刚刚地震最新消息今天2021
通辽做网站制作刚刚地震最新消息今天2021
- 技术栈
- 2026年03月21日
-
通用cms网站怎么找网红合作卖东西
通用cms网站怎么找网红合作卖东西
- 技术栈
- 2026年03月21日
