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

做网站数据库要建什么表怎么用一个主机做多个网站

做网站数据库要建什么表,怎么用一个主机做多个网站,wordpress问答类,网站模板 jsp真正的登录功能应该是#xff1a; 登陆后才能访问后端系统页面#xff0c;不登陆则跳转登陆页面进行登陆。 当我们没有设置登录校验#xff0c;可以直接通过修改地址栏直接进入管理系统内部#xff0c;跳过登录页。而后端系统的增删改查功能#xff0c;没有添加判断用户是…真正的登录功能应该是 登陆后才能访问后端系统页面不登陆则跳转登陆页面进行登陆。 当我们没有设置登录校验可以直接通过修改地址栏直接进入管理系统内部跳过登录页。而后端系统的增删改查功能没有添加判断用户是否登录的功能。所以需要登录校验 登录校验 所谓登录校验指的是我们在服务器端接收到浏览器发送过来的请求之后首先我们要对请求进行校验。先要校验一下用户登录了没有如果用户已经登录了就直接执行对应的业务操作就可以了如果用户没有登录此时就不允许他执行相关的业务操作直接给前端响应一个错误的结果最终跳转到登录页面要求他登录成功之后再来访问对应的数据。 怎么实现登录校验的操作 在员工登录成功后需要将用户登录成功的信息存起来记录用户已经登录成功的标记。在浏览器发起请求时需要在服务端进行统一拦截拦截后进行登录校验。 想要判断员工是否已经登录我们需要在员工登录成功之后存储一个登录成功的标记接下来在每一个接口方法执行之前先做一个条件判断判断一下这个员工到底登录了没有。如果是登录了就可以执行正常的业务操作如果没有登录会直接给前端返回一个错误的信息前端拿到这个错误信息之后会自动的跳转到登录页面。 我们程序中所开发的查询功能、删除功能、添加功能、修改功能都需要使用以上套路进行登录校验。此时就会出现相同代码逻辑每个功能都需要编写就会造成代码非常繁琐。为了简化这块操作我们可以使用一种技术统一拦截技术。通过统一拦截的技术我们可以来拦截浏览器发送过来的所有的请求拦截到这个请求之后就可以通过请求来获取之前所存入的登录标记在获取到登录标记且标记为登录成功就说明员工已经登录了。如果已经登录我们就直接放行(意思就是可以访问正常的业务接口了)。 我们要完成以上操作会涉及到web开发中的两个技术 会话技术统一拦截技术 而统一拦截技术现实方案也有两种 Servlet规范中的Filter过滤器Spring提供的interceptor拦截器 一、会话技术 在web开发当中会话指的就是浏览器与服务器之间的一次连接我们就称为一次会话。 在用户打开浏览器第一次访问服务器的时候这个会话就建立了直到有任何一方断开连接此时会话就结束了。在一次会话当中是可以包含多次请求和响应的。 比如打开了浏览器来访问web服务器上的资源浏览器不能关闭、服务器不能断开 第1次访问的是登录的接口完成登录操作第2次访问的是部门管理接口查询所有部门数据第3次访问的是员工管理接口查询员工数据 只要浏览器和服务器都没有关闭以上3次请求都属于一次会话当中完成的。 需要注意的是会话是和浏览器关联的当有三个浏览器客户端和服务器建立了连接时就会有三个会话。同一个浏览器在未关闭之前请求了多次服务器这多次请求是属于同一个会话。比如1、2、3这三个请求都是属于同一个会话。当我们关闭浏览器之后这次会话就结束了。而如果我们是直接把web服务器关了那么所有的会话就都结束了。 1.1 会话跟踪 一种维护浏览器状态的方法服务器需要识别多次请求是否来自于同一浏览器以便在同一次会话的多次请求间共享数据。 服务器会接收很多的请求但是服务器是需要识别出这些请求是不是同一个浏览器发出来的。比如1和2这两个请求是不是同一个浏览器发出来的3和5这两个请求不是同一个浏览器发出来的。 如果是同一个浏览器发出来的就说明是同一个会话。 如果是不同的浏览器发出来的就说明是不同的会话。 而识别多次请求是否来自于同一浏览器的过程我们就称为会话跟踪。 使用会话跟踪技术就是要完成在同一个会话中多个请求之间进行共享数据。 为什么要共享数据呢 由于HTTP是无状态协议在后面请求中怎么拿到前一次请求生成的数据呢此时就需要在一次会话的多次请求之间进行数据共享 会话跟踪技术有两种 Cookie客户端会话跟踪技术 数据存储在客户端浏览器当中 Session服务端会话跟踪技术 数据存储在储在服务端 令牌技术 1.2 会话跟踪之Cookie cookie 是客户端会话跟踪技术它是存储在客户端浏览器的。 比如第一次请求了登录接口登录接口执行完成之后我们就可以设置一个cookie在 cookie 当中我们就可以来存储用户相关的一些数据信息。比如我可以在 cookie 当中来存储当前登录用户的用户名用户的ID。服务器端在给客户端在响应数据的时候会自动的将 cookie 响应给浏览器浏览器接收到响应回来的 cookie 之后会自动的将 cookie 的值存储在浏览器本地。接下来在后续的每一次请求当中都会将浏览器本地所存储的 cookie 自动地携带到服务端。 服务器会 自动 的将 cookie 响应给浏览器。浏览器接收到响应回来的数据之后会 自动 的将 cookie 存储在浏览器本地。在后续的请求当中浏览器会 自动 的将 cookie 携带到服务器端。 为什么这一切都是自动化进行的 是因为 cookie 它是 HTP 协议当中所支持的技术而各大浏览器厂商都支持了这一标准。在 HTTP 协议官方给我们提供了一个响应头和请求头 响应头 Set-Cookie 设置Cookie数据的请求头 Cookie携带Cookie数据的 代码测试会话管理 cookie session 三大域对象总结 _ Cookie 优缺点 优点HTTP协议中支持的技术像Set-Cookie 响应头的解析以及 Cookie 请求头数据的携带都是浏览器自动进行的是无需我们手动操作的缺点 移动端APP(Android、IOS)中无法使用Cookie不安全用户可以自己禁用CookieCookie不能跨域 1.3 会话跟踪之Session 总结会话管理 cookie session 三大域对象总结 _session 优缺点 优点Session是存储在服务端的安全缺点 服务器集群环境下无法直接使用Session移动端APP(Android、IOS)中无法使用Cookie用户可以自己禁用CookieCookie不能跨域 Session 底层是基于Cookie实现的会话跟踪如果Cookie不可用则该方案也就失效了。 1.4 会话跟踪之令牌技术 本质就是一个字符串。通过令牌技术来跟踪会话发起登录请求后如果登录成功就可以生成一个令牌令牌就是用户的合法身份凭证。接下来我在响应数据的时候我就可以直接将令牌响应给前端。 接下来我们在前端程序当中接收到令牌之后就需要将这个令牌存储起来。这个存储可以存储在 cookie 当中也可以存储在其他的存储空间(比如localStorage)当中。接下来在后续的每一次请求当中都需要将令牌携带到服务端。携带到服务端之后接下来我们就需要来校验令牌的有效性。如果令牌是有效的就说明用户已经执行了登录操作如果令牌是无效的就说明用户之前并未执行登录操作。此时如果是在同一次会话的多次请求之间我们想共享数据我们就可以将共享的数据存储在令牌当中就可以了。 优缺点 优点 支持PC端、移动端解决集群环境下的认证问题减轻服务器的存储压力无需在服务器端存储 缺点需要自己实现包括令牌的生成、令牌的传递、令牌的校验 二、JWT令牌 springboot3项目中使用 jwt 和 token_五、后台管理开发 2.1 介绍 JWT全称JSON Web Token 官网jwt官方网站 通信双方以json数据格式安全的传输信息 jwt就是一个简单的字符串。可以在请求参数或者是请求头当中直接传递。我们是可以根据自身的需求在jwt令牌中存储自定义的数据内容。如可以直接在jwt令牌中存储用户的相关信息。jwt就是将原始的json数据格式进行了安全的封装 JWT的组成 JWT令牌由三个部分组成三个部分之间使用英文的点来分割 第一部分Header(头 记录令牌类型、签名算法等。 例如{“alg”:“HS256”,“type”:“JWT”} 第二部分Payload(有效载荷携带一些自定义信息、默认信息等。 例如{“id”:“1”,“username”:“Tom”} 第三部分Signature(签名防止Token被篡改、确保安全性。将header、payload并加入指定秘钥通过指定签名算法计算而来。 签名的目的就是为了防jwt令牌被篡改而正是因为jwt令牌最后一个部分数字签名的存在所以整个jwt 令牌是非常安全可靠的。一旦jwt令牌当中任何一个部分、任何一个字符被篡改了整个令牌在校验的时候都会失败所以它是非常安全可靠的。 JWT是如何将原始的JSON格式数据转变为字符串的呢其实在生成JWT令牌时会对JSON格式的数据进行一次编码进行base64编码Base64是一种基于64个可打印的字符来表示二进制数据的编码方式。既然能编码那也就意味着也能解码。所使用的64个字符分别是A到Z、a到z、 0- 9一个加号一个斜杠加起来就是64个字符。任何数据经过base64编码之后最终就会通过这64个字符来表示。当然还有一个符号那就是等号。等号它是一个补位的符号需要注意的是Base64是编码方式而不是加密方式。 JWT令牌最典型的应用场景就是登录认证 在浏览器发起请求来执行登录操作此时会访问登录的接口登录成功之后生成一个jwt令牌将生成的 jwt令牌返回给前端。前端拿到jwt令牌之后会将jwt令牌存储起来。在后续的每一次请求中都会将jwt令牌携带到服务端。服务端统一拦截请求之后先来判断一下这次请求有没有把令牌带过来如果没有带过来直接拒绝访问如果带过来了还要校验一下令牌是否是有效。如果有效就直接放行进行请求的处理。 整个流程当中涉及到两步操作 在登录成功之后要生成令牌。每一次请求当中要接收令牌并对令牌进行校验。 2.2 生成校验与登录实战 springboot3项目中使用 jwt _五、后台管理开发_5.1 用户模块开发_5.1.2 jwt 使用与测试 三、过滤器Filter 3.1 介绍 JavaWeb三大组件(Servlet、Filter、Listener)之一过滤器可以把对资源的请求拦截下来从而实现一些特殊的功能 使用了过滤器之后要想访问web服务器上的资源必须先经过滤器过滤器处理完毕之后才可以访问对应的资源。 过滤器一般完成一些通用的操作比如登录校验、统一编码处理、敏感字符处理等。 基本使用操作 第1步定义过滤器 1.定义一个类实现 Filter 接口并重写其所有方法。第2步配置过滤器Filter类上加 WebFilter 注解配置拦截资源的路径。引导类上加 ServletComponentScan 开启Servlet组件支持。 3.2 定义过滤器 //定义一个类实现一个标准的Filter过滤器的接口 public class DemoFilter implements Filter {Override //初始化方法, 只调用一次public void init(FilterConfig filterConfig) throws ServletException {System.out.println(init 初始化方法执行了);}Override //拦截到请求之后调用, 调用多次public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println(Demo 拦截到了请求...放行前逻辑);//放行chain.doFilter(request,response);}Override //销毁方法, 只调用一次public void destroy() {System.out.println(destroy 销毁方法执行了);} }init方法过滤器的初始化方法。在web服务器启动的时候会自动的创建Filter过滤器对象在创建过滤器对象的时候会自动调用init初始化方法这个方法只会被调用一次。doFilter方法这个方法是在每一次拦截到请求之后都会被调用所以这个方法是会被调用多次的每拦截到一次请求就会调用一次doFilter()方法。destroy方法 是销毁的方法。当我们关闭服务器的时候它会自动的调用销毁方法destroy而这个销毁方法也只会被调用一次。 3.3 测试 在定义完Filter之后Filter其实并不会生效还需要完成Filter的配置Filter的配置非常简单只需要在Filter类上添加一个注解WebFilter并指定属性urlPatterns通过这个属性指定过滤器要拦截哪些请求。 //配置过滤器要拦截的请求路径 WebFilter(urlPatterns /*)// /* 表示拦截浏览器的所有请求 public class DemoFilter implements Filter {Override //初始化方法, 只调用一次public void init(FilterConfig filterConfig) throws ServletException {System.out.println(init 初始化方法执行了);}Override //拦截到请求之后调用, 调用多次public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println(Demo 拦截到了请求...放行前逻辑);chain.doFilter(request,response);//放行}Override //销毁方法, 只调用一次public void destroy() {System.out.println(destroy 销毁方法执行了);} }当我们在Filter类上面加了WebFilter注解之后接下来我们还需要在启动类上面加上一个注解ServletComponentScan通过这个ServletComponentScan注解来开启SpringBoot项目对于Servlet组件的支持。 ServletComponentScan SpringBootApplication public class TliasWebManagementApplication {public static void main(String[] args) {SpringApplication.run(TliasWebManagementApplication.class, args);} }注意事项 ​ 在过滤器Filter中如果不执行放行操作将无法访问后面的资源。 放行操作chain.doFilter(request, response); 3.4 Filter详解 过滤器的执行流程 过滤器当中我们拦截到了请求之后如果希望继续访问后面的web资源就要执行放行操作放行就是调用 FilterChain对象当中的doFilter()方法在调用doFilter()这个方法之前所编写的代码属于放行之前的逻辑。 在放行后访问完 web 资源之后还会回到过滤器当中回到过滤器之后如有需求还可以执行放行之后的逻辑放行之后的逻辑我们写在doFilter()这行代码之后。 拦截路径 拦截路径urlPatterns值含义拦截具体路径/login只有访问 /login 路径时才会被拦截目录拦截/emps/*访问/emps下的所有资源都会被拦截拦截所有/*访问所有资源都会被拦截 过滤器链 3.5 登录校验-Filter 登录校验的基本流程 要进入到后台管理系统我们必须先完成登录操作此时就需要访问登录接口login。 登录成功之后我们会在服务端生成一个JWT令牌并且把JWT令牌返回给前端前端会将JWT令牌存储下来。 在后续的每一次请求当中都会将JWT令牌携带到服务端请求到达服务端之后要想去访问对应的业务功能此时我们必须先要校验令牌的有效性。 对于校验令牌的这一块操作我们使用登录校验的过滤器在过滤器当中来校验令牌的有效性。如果令牌是无效的就响应一个错误的信息也不会再去放行访问对应的资源了。如果令牌存在并且它是有效的此时就会放行去访问对应的web资源执行相应的业务操作。 所有的请求拦截到了之后都需要校验令牌吗 答案登录请求例外 拦截到请求后什么情况下才可以放行执行业务操作 答案有令牌且令牌校验通过(合法)否则都返回未登录错误结果 基于上面的业务流程我们分析出具体的操作步骤 获取请求url判断请求url中是否包含login如果包含说明是登录操作放行获取请求头中的令牌token判断令牌是否存在如果不存在返回错误结果未登录解析token如果解析失败返回错误结果未登录放行 3.6 登录实战 登录校验 过滤器 Slf4j WebFilter(urlPatterns /*) //拦截所有请求 public class LoginCheckFilter implements Filter {Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {//前置强制转换为http协议的请求对象、响应对象 转换原因要使用子类中特有方法HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;//1.获取请求urlString url request.getRequestURL().toString();log.info(请求路径{}, url); //请求路径http://localhost:8080/login//2.判断请求url中是否包含login如果包含说明是登录操作放行if(url.contains(/login)){chain.doFilter(request, response);//放行请求return;//结束当前方法的执行}//3.获取请求头中的令牌tokenString token request.getHeader(token);log.info(从请求头中获取的令牌{},token);//4.判断令牌是否存在如果不存在返回错误结果未登录if(!StringUtils.hasLength(token)){log.info(Token不存在);Result responseResult Result.error(NOT_LOGIN);//把Result对象转换为JSON格式字符串 (fastjson是阿里巴巴提供的用于实现对象和json的转换工具类)String json JSONObject.toJSONString(responseResult);response.setContentType(application/json;charsetutf-8);//响应response.getWriter().write(json);return;}//5.解析token如果解析失败返回错误结果未登录try {JwtUtils.parseJWT(token);}catch (Exception e){log.info(令牌解析失败!);Result responseResult Result.error(NOT_LOGIN);//把Result对象转换为JSON格式字符串 (fastjson是阿里巴巴提供的用于实现对象和json的转换工具类)String json JSONObject.toJSONString(responseResult);response.setContentType(application/json;charsetutf-8);//响应response.getWriter().write(json);return;}//6.放行chain.doFilter(request, response);} }第三方json处理的工具包fastjson: 导入依赖 dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.76/version /dependency四、拦截器Interceptor 是一种动态拦截方法调用的机制类似于过滤器。拦截器是Spring框架中提供的用来动态拦截控制器方法的执行。拦截请求在指定方法调用前后根据业务需要执行预先设定的代码。 在拦截器当中我们通常也是做一些通用性的操作比如我们可以通过拦截器来拦截前端发起的请求将登录校验的逻辑全部编写在拦截器当中。在校验的过程当中如发现用户登录了(携带JWT令牌且是合法令牌)就可以直接放行去访问spring当中的资源。如果校验时发现并没有登录或是非法令牌就可以直接给前端响应未登录的错误信息。 定义拦截器注册配置拦截器 4.1 自定义拦截器 实现HandlerInterceptor接口并重写其所有方法 //自定义拦截器 Component public class LoginCheckInterceptor implements HandlerInterceptor {//目标资源方法执行前执行。 返回true放行 返回false不放行Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(preHandle .... );return true; //true表示放行}//目标资源方法执行后执行Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(postHandle ... );}//视图渲染完毕后执行最后执行Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(afterCompletion .... );} }注意 ​ preHandle方法目标资源方法执行前执行。 返回true放行 返回false不放行 ​ postHandle方法目标资源方法执行后执行 ​ afterCompletion方法视图渲染完毕后执行最后执行 4.2 注册配置拦截器 Configuration public class WebConfig implements WebMvcConfigurer {//自定义的拦截器对象Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册自定义拦截器对象registry.addInterceptor(loginCheckInterceptor).addPathPatterns(/**);//设置拦截器拦截的请求路径 /** 表示拦截所有请求} }4.3 Interceptor详解 拦截路径: 通过addPathPatterns(要拦截路径)方法就可以指定要拦截哪些资源。/**表示拦截所有资源而在配置拦截器时不仅可以指定要拦截哪些资源还可以指定不拦截哪些资源只需要调用excludePathPatterns(不拦截路径)方法指定哪些资源不需要拦截。 Configuration public class WebConfig implements WebMvcConfigurer {//拦截器对象Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册自定义拦截器对象registry.addInterceptor(loginCheckInterceptor).addPathPatterns(/**)//设置拦截器拦截的请求路径 /** 表示拦截所有请求.excludePathPatterns(/login);//设置不拦截的请求路径} }常见拦截路径设置 拦截路径含义举例/*一级路径能匹配/depts/emps/login不能匹配 /depts/1/**任意级路径能匹配/depts/depts/1/depts/1/2/depts/*/depts下的一级路径能匹配/depts/1不能匹配/depts/1/2/depts/depts/**/depts下的任意级路径能匹配/depts/depts/1/depts/1/2不能匹配/emps/1 执行流程 当我们打开浏览器来访问部署在web服务器当中的web应用时此时我们所定义的过滤器会拦截到这次请求。拦截到这次请求之后它会先执行放行前的逻辑然后再执行放行操作。而由于我们当前是基于springboot开发的所以放行之后是进入到了spring的环境当中也就是要来访问我们所定义的controller当中的接口方法。 Tomcat并不识别所编写的Controller程序但是它识别Servlet程序所以在Spring的Web环境中提供了一个非常核心的ServletDispatcherServlet前端控制器所有请求都会先进行到DispatcherServlet再将请求转给Controller。 当我们定义了拦截器后会在执行Controller的方法之前请求被拦截器拦截住。执行preHandle()方法这个方法执行完成后需要返回一个布尔类型的值如果返回true就表示放行本次操作才会继续访问controller中的方法如果返回false则不会放行controller中的方法也不会执行。 在controller当中的方法执行完毕之后再回过来执行postHandle()这个方法以及afterCompletion() 方法然后再返回给DispatcherServlet最终再来执行过滤器当中放行后的这一部分逻辑的逻辑。执行完毕之后最终给浏览器响应数据。 4.4 过滤器与拦截器 滤器和拦截器同时存在的执行流程 开启LoginCheckInterceptor拦截器 Component public class LoginCheckInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(preHandle .... );return true; //true表示放行}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(postHandle ... );}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(afterCompletion .... );} }注册拦截器到mvc Configuration public class WebConfig implements WebMvcConfigurer {//拦截器对象Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册自定义拦截器对象registry.addInterceptor(loginCheckInterceptor).addPathPatterns(/**)//拦截所有请求.excludePathPatterns(/login);//不拦截登录请求} }开启DemoFilter过滤器 WebFilter(urlPatterns /*) public class DemoFilter implements Filter {Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println(DemoFilter 放行前逻辑.....);//放行请求filterChain.doFilter(servletRequest,servletResponse);System.out.println(DemoFilter 放行后逻辑.....);} }接口规范不同过滤器需要实现Filter接口而拦截器需要实现HandlerInterceptor接口。拦截范围不同过滤器Filter会拦截所有的资源而Interceptor只会拦截Spring环境中的资源。 4.5 登录实战 拦截器登录拦截与过滤器代码逻辑实现是一样的 //自定义拦截器 Component //当前拦截器对象由Spring创建和管理 Slf4j public class LoginCheckInterceptor implements HandlerInterceptor {//前置方式Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(preHandle .... );//1.获取请求url//2.判断请求url中是否包含login如果包含说明是登录操作放行//3.获取请求头中的令牌tokenString token request.getHeader(token);log.info(从请求头中获取的令牌{},token);//4.判断令牌是否存在如果不存在返回错误结果未登录if(!StringUtils.hasLength(token)){log.info(Token不存在);//创建响应结果对象Result responseResult Result.error(NOT_LOGIN);//把Result对象转换为JSON格式字符串 (fastjson是阿里巴巴提供的用于实现对象和json的转换工具类)String json JSONObject.toJSONString(responseResult);//设置响应头告知浏览器响应的数据类型为json、响应的数据编码表为utf-8response.setContentType(application/json;charsetutf-8);//响应response.getWriter().write(json);return false;//不放行}//5.解析token如果解析失败返回错误结果未登录try {JwtUtils.parseJWT(token);}catch (Exception e){log.info(令牌解析失败!);//创建响应结果对象Result responseResult Result.error(NOT_LOGIN);//把Result对象转换为JSON格式字符串 (fastjson是阿里巴巴提供的用于实现对象和json的转换工具类)String json JSONObject.toJSONString(responseResult);//设置响应头response.setContentType(application/json;charsetutf-8);//响应response.getWriter().write(json);return false;}//6.放行return true;}Configuration public class WebConfig implements WebMvcConfigurer {//拦截器对象Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册自定义拦截器对象registry.addInterceptor(loginCheckInterceptor).addPathPatterns(/**).excludePathPatterns(/login);} }五、跨域介绍 现在的项目大部分都是前后端分离的前后端最终也会分开部署前端部署在服务器 192.168.150.200 上端口 80后端部署在 192.168.150.100上端口 8080我们打开浏览器直接访问前端工程访问urlhttp://192.168.150.200/login.html然后在该页面发起请求到服务端而服务端所在地址不再是localhost而是服务器的IP地址192.168.150.100假设访问接口地址为http://192.168.150.100:8080/login那此时就存在跨域操作了因为我们是在 http://192.168.150.200/login.html 这个页面上访问了http://192.168.150.100:8080/login 接口此时如果服务器设置了一个Cookie这个Cookie是不能使用的因为Cookie无法跨域 区分跨域的维度 协议IP/协议端口 只要上述的三个维度有任何一个维度不同那就是跨域操作 举例 ​ http://192.168.150.200/login.html ---------- https://192.168.150.200/login [协议不同跨域] ​ http://192.168.150.200/login.html ---------- http://192.168.150.100/login [IP不同跨域] ​ http://192.168.150.200/login.html ---------- http://192.168.150.200:8080/login [端口不同跨域] ​ http://192.168.150.200/login.html ---------- http://192.168.150.200/login [不跨域] 六、服务器集群环境为何无法使用Session 首先第一点我们现在所开发的项目一般都不会只部署在一台服务器上因为一台服务器会存在一个很大的问题就是单点故障。所谓单点故障指的就是一旦这台服务器挂了整个应用都没法访问了。所以项目开发当中最终部署的时候都是以集群的形式来进行部署也就是同一个项目它会部署多份。 而用户在访问的时候到底访问这三台其中的哪一台其实用户在访问的时候他会访问一台前置的服务器我们叫负载均衡服务器它的作用就是将前端发起的请求均匀的分发给后面的这三台服务器。 此时假如我们通过 session 来进行会话跟踪可能就会存在这样一个问题。用户打开浏览器要进行登录操作此时会发起登录请求。登录请求到达负载均衡服务器将这个请求转给了第一台 Tomcat 服务器。Tomcat 服务器接收到请求之后要获取到会话对象session。获取到会话对象 session 之后要给浏览器响应数据最终在给浏览器响应数据的时候就会携带这么一个 cookie 的名字就是 JSESSIONID 下一次再请求的时候是不是又会将 Cookie 携带到服务端好。此时假如又执行了一次查询操作要查询部门的数据。这次请求到达负载均衡服务器之后负载均衡服务器将这次请求转给了第二台 Tomcat 服务器此时他就要到第二台 Tomcat 服务器当中。根据JSESSIONID 也就是对应的 session 的 ID 值要找对应的 session 会话对象。我想请问在第二台服务器当中有没有这个ID的会话对象 Session 是没有的。此时是不是就出现问题了我同一个浏览器发起了 2 次请求结果获取到的不是同一个会话对象这就是Session这种会话跟踪方案它的缺点在服务器集群环境下无法直接使用Session。
http://www.zqtcl.cn/news/383088/

相关文章:

  • 屯昌网站建设wap网站搭建
  • 毕设做音乐网站重庆正云环境网页制作
  • 免费网站建站w深圳罗湖建网站
  • 创建一个网站一般步骤有哪些互动网站策划
  • 文化传媒 网站设计宿迁网站建设价格
  • 网站开发五人分工是网站推广的案例
  • 海外网站制作seo技术
  • 包头网站建设熊掌号免费行情100个软件
  • 江门网站制作维护电子商务网站运营与管理
  • 动画网页制作网站常用的网络推广方法有
  • 一个设计网站多少钱sku电商是什么意思
  • 做网站优化有前景吗emlog和wordpress
  • 30天网站建设实录 pdf货源网站程序
  • 做企业网站需要多久培训机构 网站建设
  • 商业网站初期建设资金预算哈尔滨视频制作公司
  • 网站建设教程网哪个好wordpress 侧边栏 固定
  • 对网站主要功能界面进行赏析软件开发和app开发的区别
  • 西安市高陵区建设局网站如何重新安装电脑上的wordpress
  • 合肥网站快速优化排名全球人口多少亿
  • 中山网站关键字优化使用动易模版制作网站
  • 深圳营销网站建设报价广西住房建设厅网站
  • 爱站网appwordpress图片500
  • 北京网站排名制作图片点击就能跳转网站怎么做的
  • dw网站建设的数据库网站建设托管pfthost
  • 牛商网做网站成品网站1688入口
  • 涿鹿县建设局网站网络营销的定义和特点
  • 网站建设朋友圈怎么写深圳宝安区松岗
  • 苏州网站的建设哪个网站上做自媒体最好
  • 传送门网站是怎么做的wordpress seo标题
  • 曲靖 曲靖网站建设软件(app)开发视频一页网站怎么做