各种拦截:
1.前端拓展:
disabled 作用:不可编辑
2.后端拓展:
1.serialize()定义和用法:
serialize()方法通过序列化表单值,创建标准的URL编码文本字符串,它的操作对象是代表表单元素集合的jQuery 对象。你可以选择一个或多个表单元素(比如input或文本框),或者 form 元素本身。序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中
2.转发和重定向的使用:
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起
3.登录拦截器:
Handler的定义:
Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if (session.getAttribute("EMPLOYEE IN SESSION") == null) {
//响应.发送重定向
response.sendRedirect("/static/login.html");
return false;
}
return true;
}
}
3.登录拦截器配置
@Configuration
public class MvcJavaConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {//拦截器注册表(InterceptorRegistry)
//addInterceptor(添加拦截器)
registry.addInterceptor(loginInterceptor)
//添加拦截路径
.addPathPatterns("/**")
.excludePathPatterns("/static/**")
//排除的意思,代表不拦截该路径
.excludePathPatterns("/login");
}
}
4.退出功能
@RequestMapping("/logout")
public String logout(HttpSession httpSession){
//清空数据(属性)会话
httpSession.removeAttribute("EMPLOYEE_IN_SESSION"); //get set remove
return "redirect:/static/login.html";
}
5.理解HandlerMethod 在spring mvc 处理请求过程中的作用
SpringMVC 应用启动时会搜集并分析每个Web控制器方法,从中提取对应的 “<请求匹配条件,控制器方法>“ 映射关系,形成一个映射关系表保存在一个RequestMappingHandlerMapping bean中。然后在客户请求到达时,再使用 RequestMappingHandlerMapping 中的该映射关系表找到相应的控制器方法去处理该请求。在RequestMappingHandlerMapping 中保存的每个 ”<请求匹配条件,控制器方法>” 映射关系对儿中, “请求匹配条件” 通过 RequestMappingInfo 包装和表示,而 "控制器方法"则通过 HandlerMethod 来包装和表示
6.权限拦截:
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private PermissionServiceImpl permissionService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//判断访问的用户是不是管理员
Employee employee = (Employee) request.getSession().getAttribute("EMPLOYEE_IN_SESSION");
if (employee.isAdmin()) {//是管理员
return true;
}
//访问的用户不是管理员
//获取访问处理方法
//handlerMethod("控制器方法"则通过 HandlerMethod 来包装和表示)
HandlerMethod handlerMethod = (HandlerMethod) handler;
RequiredPermission annotation = handlerMethod.getMethod().getAnnotation(RequiredPermission.class);
if (annotation == null) {
return true;
}
//判断角色有没有相应的权限
List<String> expremissions = permissionService.queryExpremissionsByEmployee(employee.getId());
if (expremissions.contains(annotation.expression())) {
// contains : 判断()里面的东西在expremissions有没有
return true;
}
return false;
}
}