springmvc拦截器问题之通过角色名来取对应的方法
2021-01-04 11:29
YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
标签:mit handler 用户数 object index except body ESS 信息
题目:
编写一个拦截器,在拦截器中获取登录用户的角色名,
如果角色名为admin,则允许操作StudentController的方法;
如果角色名为test,则允许操作UserController的方法;
如果没有权限,则跳转到一个特定的jsp页面,提示权限不足;
一、先写一个显示在浏览器端的登录页面;
"text/html;charset=UTF-8" language="java" isELIgnored="false" %>用户登录
二、再写一个控制层的业务逻辑;
@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> map=new HashMap(); //角色名 角色拥有的权限 map.put("admin", Arrays.asList("StudentController","IndexController")); map.put("test",Arrays.asList("UserController")); //判断角色与请求的控制层关系 List 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的配置文件中再配置一个角色的拦截器,这里有一点我们需要注意,如果我们在配置文件中配置了多个拦截器的话,拦截器的执行顺序为其配置的先后顺序,配置的前面的先执行;
"/**"/> "/login"/> "authorityInterceptor" class="interceptor.AuthorityInterceptor">
springmvc拦截器问题之通过角色名来取对应的方法
标签:mit handler 用户数 object index except body ESS 信息
原文地址:https://www.cnblogs.com/xie-qi/p/12983731.html
上一篇:多线程-线程池
下一篇:python --- 面向对象