使用拦截器控制权限
在实际应用中,我们可以使用拦截器来控制权限,比如,这里做一个这样的小功能,判断用户名为monkey1024用户是否已登录,如果已登录,则可以访问系统的欢迎界面,否则返回禁止登录的界面。
先来定一个controller,此时需要确保该方法必须在登录之后才能访问,我们后面通过拦截器控制:
@Controller
public class LoginController {
@RequestMapping("welcome")
public String welcome() {
//跳转到welcome.html
return "welcome";
}
}
welcome.html:
欢迎登陆
登录页面login.html:
姓名:
密码:
处理登录的controller
@RequestMapping("login")
public String login(String name,String password,HttpSession session) {
if ("monkey1024".equals(name) && "123456".equals(password)) {
session.setAttribute("user",name);
}
return "redirect:/html/success.html";
}
定义PermissionInterceptor拦截器:
package com.monkey1024.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PermissionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//从session中获取登录数据
String user = (String) request.getSession().getAttribute("user");
System.out.println(request.getRequestURI());
//判断该用户名是否是monkey1024
if (!"monkey1024".equals(user)) {
response.sendRedirect("/html/login.html");
//不放行
return false;
}
//放行
return true;
}
}
实际应用中,有些controller是不能拦截的,比如处理登录的controller,如果拦截的话,会导致无法登录,整个系统都无法使用了。此时我们可以通过在springmvc的配置文件中添加exclude-mapping设置不拦截的请求