标签:mit handler 用户数 object index except body ESS 信息
题目:
编写一个拦截器,在拦截器中获取登录用户的角色名,
如果角色名为admin,则允许操作StudentController的方法;
如果角色名为test,则允许操作UserController的方法;
如果没有权限,则跳转到一个特定的jsp页面,提示权限不足;
一、先写一个显示在浏览器端的登录页面;
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>用户登录</title> </head> <body> <form action="${pageContext.request.contextPath}/login"> 用户名:<input type="text" name="name"/><br/> 密码: <input type="password" name="password"/><br/> <input type="submit" value="登录"/> </form> </body> </html>
二、再写一个控制层的业务逻辑;
@Controller public class IndexController { @RequestMapping("/login") public String login(String name, String password, HttpSession session){ System.out.println("获取到前台数据:name="+name+",password="+password); //todo 查询数据库,验证是否存在用户数据 User user=new User(); user.setName(name); Role role=null; if ("admin".equals(name)){ role=new Role("admin",1); }else if ("test".equals(name)){ role=new Role("test",2); } user.setRole(role); if (user==null){//如果用户不存在,跳回登录页面 return "login.jsp"; } //登录成功,将用户信息放入session session.setAttribute("user",user); return "index.jsp"; } }
三、最后写一个用户的权限拦截器;
//用户权限拦截器 public class AuthorityInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //获取到session域中的用户信息 User user= (User) request.getSession().getAttribute("user"); //获取角色信息 Role role=user.getRole(); if (role!=null){ //获取当前的请求的Controller String controllerName=""; if (handler instanceof HandlerMethod) { HandlerMethod method = (HandlerMethod) handler; //获取当前控制层的名字 controllerName = method.getBeanType().getSimpleName(); } Map<String, List<String>> map=new HashMap<>(); //角色名 角色拥有的权限 map.put("admin", Arrays.asList("StudentController","IndexController")); map.put("test",Arrays.asList("UserController")); //判断角色与请求的控制层关系 List<String> list=map.get(role.getName()); if (list!=null&&list.contains(controllerName)){ return true; } } response.sendRedirect(request.getContextPath()+"/403.jsp"); return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
四、到这里呢,我们的脚本工作已经完成了,还需要在springmvc的配置文件中再配置一个角色的拦截器,这里有一点我们需要注意,如果我们在配置文件中配置了多个拦截器的话,拦截器的执行顺序为其配置的先后顺序,配置的前面的先执行;
<!-- 拦截器的执行顺序为其配置顺序,配置在前面的先执行--> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/login"/> <bean id="authorityInterceptor" class="interceptor.AuthorityInterceptor"></bean> </mvc:interceptor>
标签:mit handler 用户数 object index except body ESS 信息
原文地址:https://www.cnblogs.com/xie-qi/p/12983731.html