一、安全退出

1.安全退出的流程图

安全退出.png

2.安全退出代码实现

  1. @RequestMapping("/settings/qx/user/logout.do")
  2. public String logout(HttpServletResponse response,HttpSession session){
  3. //清空cookie
  4. Cookie c1= new Cookie("loginAct","1");
  5. c1.setMaxAge(0);
  6. response.addCookie(c1);
  7. Cookie c2= new Cookie("loginPwd","1");
  8. c2.setMaxAge(0);
  9. response.addCookie(c2);
  10. //销毁session
  11. session.invalidate();
  12. //跳转到首页
  13. return "redirect:/";
  14. }

image.png

  1. <button type="button" class="btn btn-primary" data-dismiss="modal" id="logoutBtn">确定</button>
  1. //页面加载完毕
  2. $(function(){
  3. //导航中所有文本颜色为黑色
  4. $(".liClass > a").css("color" , "black");
  5. //默认选中导航菜单中的第一个菜单项
  6. $(".liClass:first").addClass("active");
  7. //第一个菜单项的文字变成白色
  8. $(".liClass:first > a").css("color" , "white");
  9. //给所有的菜单项注册鼠标单击事件
  10. $(".liClass").click(function(){
  11. //移除所有菜单项的激活状态
  12. $(".liClass").removeClass("active");
  13. //导航中所有文本颜色为黑色
  14. $(".liClass > a").css("color" , "black");
  15. //当前项目被选中
  16. $(this).addClass("active");
  17. //当前项目颜色变成白色
  18. $(this).children("a").css("color","white");
  19. });
  20. window.open("main/index.html","workareaFrame");
  21. //给"确定按钮添加单击事件"
  22. $("#logoutBtn").click(function () {
  23. //发送同步请求
  24. window.location.href="settings/qx/user/logout.do"
  25. });
  26. });

二、登录验证

1.为什么要登录验证

image.png

2.实现登录验证

image.png

  1. public class LoginInterceptor implements HandlerInterceptor {
  2. @Override
  3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
  4. //如果用户没有登录成功,则跳转到登录页面
  5. HttpSession session= request.getSession();
  6. User user= (User) session.getAttribute(Contants.SESSION_USER);
  7. if(user==null){
  8. //自己重定向一定要带项目的名字
  9. // response.sendRedirect("/crm"); 这样就写死了
  10. response.sendRedirect(request.getContextPath());
  11. return false;
  12. }
  13. return true;
  14. }
  15. @Override
  16. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  17. HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
  18. }
  19. @Override
  20. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  21. HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
  22. }
  23. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  7. <!--添加包扫描-->
  8. <context:component-scan base-package="com.bjpowernode.crm.web.controller"></context:component-scan>
  9. <context:component-scan base-package="com.bjpowernode.crm.settings.web.controller"></context:component-scan>
  10. <context:component-scan base-package="com.bjpowernode.crm.workbench.web.controller"></context:component-scan>
  11. <!--添加注解驱动-->
  12. <mvc:annotation-driven></mvc:annotation-driven>
  13. <!-- 配置视图解析器 -->
  14. <bean id="viewResolver"
  15. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  16. <property name="prefix" value="/WEB-INF/pages/"/>
  17. <property name="suffix" value=".jsp"/>
  18. </bean>
  19. <mvc:interceptors>
  20. <mvc:interceptor>
  21. <!--配置拦截的请求 -->
  22. <!--mvc:exclude-mapping path="/settings/*"/>一个星星代表一层子目录 -->
  23. <mvc:mapping path="/settings/**"/> <!--两个星星所有的子目录 -->
  24. <mvc:mapping path="/workbench/**"/>
  25. <!--排除拦截的请求-->
  26. <mvc:exclude-mapping path="/settings/qx/user/toLogin.do" />
  27. <mvc:exclude-mapping path="/settings/qx/user/login.do" />
  28. <!--拦截器类-->
  29. <bean class="com.bjpowernode.crm.settings.web.interceptor.LoginInterceptor"/>
  30. </mvc:interceptor>
  31. </mvc:interceptors>
  32. <!-- 配置文件上传解析器 id:必须是multipartResolver-->
  33. <!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  34. <property name="maxUploadSize" value="#{1024*1024*80}"/>
  35. <property name="defaultEncoding" value="utf-8"/>
  36. </bean>-->
  37. <mvc:default-servlet-handler /><!--静态资源释放-->
  38. </beans>

三、解决业务的404问题

image.png

1.页面切割技术

frameset和frame

  1. <frameset><frame>
  2. <frameset>:用来切割页面.
  3. <frameset cols="20%,60%,20%" rows="10%,80%,10%">
  1. <frameset cols="20%,60%,20%">
  2. <frame src ="url1" name="f1">
  3. <frame src ="url2" name="f2">
  4. <frame src ="url3" name="f3">
  5. </frameset>
  6. 每一个<frame>标签就是一个独立的浏览器窗口。
  7. <a href="url" target="f3">test</a>