一、安全退出
1.安全退出的流程图
2.安全退出代码实现
@RequestMapping("/settings/qx/user/logout.do")
public String logout(HttpServletResponse response,HttpSession session){
//清空cookie
Cookie c1= new Cookie("loginAct","1");
c1.setMaxAge(0);
response.addCookie(c1);
Cookie c2= new Cookie("loginPwd","1");
c2.setMaxAge(0);
response.addCookie(c2);
//销毁session
session.invalidate();
//跳转到首页
return "redirect:/";
}
![image.png](/uploads/projects/caoshuyao@java01/12e4b5c61c19a3d0880bbb8d6623ddc5.png)
<button type="button" class="btn btn-primary" data-dismiss="modal" id="logoutBtn">确定</button>
//页面加载完毕
$(function(){
//导航中所有文本颜色为黑色
$(".liClass > a").css("color" , "black");
//默认选中导航菜单中的第一个菜单项
$(".liClass:first").addClass("active");
//第一个菜单项的文字变成白色
$(".liClass:first > a").css("color" , "white");
//给所有的菜单项注册鼠标单击事件
$(".liClass").click(function(){
//移除所有菜单项的激活状态
$(".liClass").removeClass("active");
//导航中所有文本颜色为黑色
$(".liClass > a").css("color" , "black");
//当前项目被选中
$(this).addClass("active");
//当前项目颜色变成白色
$(this).children("a").css("color","white");
});
window.open("main/index.html","workareaFrame");
//给"确定按钮添加单击事件"
$("#logoutBtn").click(function () {
//发送同步请求
window.location.href="settings/qx/user/logout.do"
});
});
二、登录验证
1.为什么要登录验证
2.实现登录验证
![image.png](/uploads/projects/caoshuyao@java01/52cc6593a9456a46a18982d5cba20f14.png)
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
//如果用户没有登录成功,则跳转到登录页面
HttpSession session= request.getSession();
User user= (User) session.getAttribute(Contants.SESSION_USER);
if(user==null){
//自己重定向一定要带项目的名字
// response.sendRedirect("/crm"); 这样就写死了
response.sendRedirect(request.getContextPath());
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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">
<!--添加包扫描-->
<context:component-scan base-package="com.bjpowernode.crm.web.controller"></context:component-scan>
<context:component-scan base-package="com.bjpowernode.crm.settings.web.controller"></context:component-scan>
<context:component-scan base-package="com.bjpowernode.crm.workbench.web.controller"></context:component-scan>
<!--添加注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:interceptors>
<mvc:interceptor>
<!--配置拦截的请求 -->
<!--mvc:exclude-mapping path="/settings/*"/>一个星星代表一层子目录 -->
<mvc:mapping path="/settings/**"/> <!--两个星星所有的子目录 -->
<mvc:mapping path="/workbench/**"/>
<!--排除拦截的请求-->
<mvc:exclude-mapping path="/settings/qx/user/toLogin.do" />
<mvc:exclude-mapping path="/settings/qx/user/login.do" />
<!--拦截器类-->
<bean class="com.bjpowernode.crm.settings.web.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 配置文件上传解析器 id:必须是multipartResolver-->
<!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="#{1024*1024*80}"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>-->
<mvc:default-servlet-handler /><!--静态资源释放-->
</beans>
三、解决业务的404问题
1.页面切割技术
frameset和frame
<frameset>和<frame>
<frameset>:用来切割页面.
<frameset cols="20%,60%,20%" rows="10%,80%,10%">
<frameset cols="20%,60%,20%">
<frame src ="url1" name="f1">
<frame src ="url2" name="f2">
<frame src ="url3" name="f3">
</frameset>
每一个<frame>标签就是一个独立的浏览器窗口。
<a href="url" target="f3">test</a>