使用SpringMVC拦截器做一个简单的权限控制
2015-03-20 00:00
369 查看
编写一个继承HandlerInterceptorAdapter的拦截器:
在配置文件中添加配置:
package com.tzj.web.interceptor; import java.io.PrintWriter; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.tzj.Constants; public class SecurityInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(true); // 从session 里面获取用户名的ID和所属权限组ID String userId = (String) session.getAttribute(Constants.USER_ID); Integer userGrouping = (Integer) request.getSession().getAttribute(Constants.USER_GROUPING); // 系统全部权限 Map<Integer, String> allFunction = (Map<Integer, String>) request .getSession().getAttribute(Constants.ALL_FUNCTION); // 用户所拥有权限 Map<Integer, String> userFunction = (Map<Integer, String>) request .getSession().getAttribute(Constants.USER_FUNCTION); // 设置编码 response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); StringBuilder builder = new StringBuilder(); String requestUri = request.getRequestURI(); // 判断如果没有取到用户信息,提示用户进行登陆,并跳转到登陆页面 if (null == userId || "".equals(userId)) { // 用户未登录 if("/".equals(requestUri) || "".equals(requestUri)){ response.sendRedirect(request.getContextPath() + Constants.LOGIN_URL_MESSAGE); }else{ response.sendRedirect(request.getContextPath() + Constants.LOGIN_URL_NOT_MESSSAGE); } return false; } // 用户已经登录 但是不属于任何权限组 if (null == userGrouping || "".equals(userGrouping)) { builder.append("<script type=\"text/jav 7fe1 ascript\" charset=\"UTF-8\">"); builder.append("alert(\"你没有权限,请联系管理员,获取相应权限!\");"); builder.append("location.href=\"javascript:history.go(-1)\";</script>"); out.print(builder.toString()); out.close(); return false; } if (isIntercept(allFunction, requestUri)) { // 需要拦截URl if (isHavePermission(userFunction, requestUri)) {// 用户有该访问权限 return true; } else {// 用户登录,但是没有访问权限 builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">"); builder.append("alert(\"你没有权限,请联系管理员,获取相应权限!\");"); builder.append("location.href=\"javascript:history.go(-1)\";</script>"); out.print(builder.toString()); out.close(); return false; } } else {// 需要拦截URl return true; } } // 是否需要拦截 public boolean isIntercept(Map<Integer, String> allFunction, String requestUri) { // 对需要拦截的权限进行权限验证 for (Entry<Integer, String> entry : allFunction.entrySet()) { // 有权限则不进行拦截 放行 if (null != entry.getValue() && !"".equals(entry.getValue()) && -1 != requestUri.indexOf(entry.getValue())) { return true; } } return false; } // 是否有权权限 public boolean isHavePermission(Map<Integer, String> userFunction, String requestUri) { // 对需要拦截的权限进行权限验证 for (Entry<Integer, String> entry : userFunction.entrySet()) { // 有权限则不进行拦截 放行 if (null != entry.getValue() && !"".equals(entry.getValue()) && -1 != requestUri.indexOf(entry.getValue())) { return true; } } return false; } }
在配置文件中添加配置:
<!-- Url拦截 --> <mvc:interceptors> <mvc:interceptor> <!-- 只拦截带有"/tzj/app/"请求 --> <mvc:mapping path="/**/tzj/app/**"/> <!-- 带有"/tzj/app/errorInfo"请求不进行拦截 --> <mvc:exclude-mapping path="/**/tzj/app/errorInfo"/> <bean class="com.tzj.web.interceptor.ServiceInterceptor"/> </mvc:interceptor> </mvc:interceptors>
相关文章推荐
- 使用Struts2的拦截器实现权限控制
- 在struts中使用拦截器(Interceptor)控制登录和权限
- SpringMVC拦截器简单使用
- struts2 使用注解、反射、拦截器实现基于方法的权限控制
- 一款二级菜单和使用自定义标签实现简单权限控制
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- 拦截器权限控制使用Struts 拦截namespace进行权限控制-java教程
- 《struts2权威指南》学习笔记之使用拦截器完成权限控制
- SpringMVC拦截器简单使用
- 权限控制拦截器的使用方法
- 使用Struts2的拦截器实现权限控制
- Struts 2读书笔记-----拦截器之示例:使用拦截器完成权限控制
- SpringMVC、MyBatis实现的一个简单权限管理系统
- SpringMVC拦截器简单使用
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- Struts2使用过滤器和拦截器进行简单权限校验
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- java struts 2 使用拦截器完成权限控制
- 在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
- 在struts2.1中使用注解和拦截器实现权限细粒度控制