拦截器以及界面位置
效果:访问main.html时会进行拦截,判断是否存在用户,不存在则跳转登录
登录成功跳转成功页面
1、写一个登录拦截类LoginInterceptor实现HandlerInterceptor
@Component
public class LoginInterceptor implements HandlerInterceptor {
//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
//判断session中是否存在用户
User user = (User) request.getSession().getAttribute("user");
if(user == null){
request.setAttribute("msg","没有权限");
//请求转发到登录界面
request.getRequestDispatcher("/index").forward(request,response);
return false;
}else {
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
}
}
2、写WebConfigurer类实现WebMvcConfigurer。重写addInterceptors。将自定义拦截器加入
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
// 这个方法是用来配置静态资源的,比如html,js,css,等等
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截所有请求,排除两个请求"/index","/login",不需要拦截登录请求
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/index","/login");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//发送/main.html请求来到bmodule/B01
registry.addViewController("/main.html").setViewName("bmodule/B01");
}
}
3、controller类A01Controller
@Controller
public class A01Controller {
@RequestMapping("/index")
public String test1(){
return "amodule/A01";
}
@PostMapping(value = "/login")
public String test2(@RequestParam("username") String username,
@RequestParam("password") String password,
HttpSession session,
Map map){
//登录成功重定向到b01界面(假设账号密码)
if("123".equals(username) && "123".equals(password)){
User user = new User();
user.setUser_name(username);
user.setPassword(password);
session.setAttribute("user",user);
return "redirect:/main.html";
}else {
map.put("msg","账号或密码错误,请重新登录");
return "amodule/A01";
}
}
}
4、JSP前端登录页面(amodule/A01.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/bootstrap-fileinput-master/css/fileinput.css"/>
<script src="${pageContext.request.contextPath}/js/jquery-2.1.1.min.js"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/dist/css/AdminLTE.min.css">
<link href="${pageContext.request.contextPath}/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/js/layer/theme/default/layer.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/bower_components/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/themes/icon.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/wood.css">
<script type="text/javascript" src="${pageContext.request.contextPath}/bower_components/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/layer/layer.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/bower_components/bootstrap/dist/js/bootstrap.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap-fileinput-master/js/fileinput.min.js"></script>
</head>
<body>
<!-- 登录表单 -->
<form style="margin-left:500px;margin-top:200px;" action="${pageContext.request.contextPath}/login" method="POST" id="formBtn" >
<p style="color: red;">${msg}</p>
<div class="form-group">
<label for="user" stype="display:inline;">账户:</label>
<input type="text" class="form-control" name="username" id="user" style="display:inline;width:200px;"autocomplete="off" />
</div>
<div class="form-group">
<label for="password" style="display:inline;">密码:</label>
<input type="text" class="form-control" name="password" id="password" style="display:inline;width:200px;"autocomplete="off" />
</div>
<button type="submit" class="btn btn-primary">登录</button>
</form>
</body>
<script type="text/javascript">
</script>
</html>
5、登录成功跳转页面(bmodule/B01.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登录成功,跳转此页面
</body>
</html>