zoukankan      html  css  js  c++  java
  • springMVC 拦截器

    @Controller
    public class AdminController {
    
        @Inject
        private AdminService adminService;
        
        @RequestMapping(value="/",method=RequestMethod.GET)
        public String index() {
            
            return "index";
        }
        
        @RequestMapping(value="/",method=RequestMethod.POST)
        public String login(Admin admin,HttpSession session,RedirectAttributes redirectAttributes) {
            
            
            Admin currAdmin = adminService.login(admin.getName(),admin.getPassword());
            if(currAdmin == null) {
                redirectAttributes.addFlashAttribute("message", "账号或密码错误");
                // 重定向 
                return "redirect:/";
            } else {
                session.setAttribute("curr_admin", currAdmin);
                return "redirect:/book";
            }
        }
        
    }

    写一个类,继承HandlerInterceptorAdapter,并重写preHandle方法

    public class LoginInterceptor extends HandlerInterceptorAdapter{
        
        private List<String> execludeUrls;
        
        
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            
            String url = request.getRequestURI();
            
            if(execludeUrls.contains(url) || url.startsWith("/static")) {
                return true;
            } else {
            
                HttpSession session = request.getSession();
                Admin admin = (Admin) session.getAttribute("curr_admin");
                
                if(admin == null) {
                    System.out.println("未登录用户访问,访问被拒绝");
                    //response.sendRedirect("/");
                    /*在这里如果选择抛出异常,需要自定义一个异常,并且在mvc-servlet.xml中配置异常 */
                    throw new LoginException();
                } 
                return true;
            }
        }
    
        // set注入 
        public void setExecludeUrls(List<String> execludeUrls) {
            this.execludeUrls = execludeUrls;
        }
    
    }

     自定义异常 

    package com.kaishengit.exception;
    
    public class LoginException extends RuntimeException{
    
        
        private static final long serialVersionUID = 1L;
    
    }

    且在mvc-servlet.xml中配置

    1.异常处理

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <!-- 这里的异常处理选择重定向 -->
                    <prop key="com.kaishengit.exception.LoginException">redirect:/</prop>
                </props>
            </property>
        </bean>

    2.拦截器配置

    <mvc:interceptors>
            
            <mvc:interceptor>
                <!-- 所有都要经过拦截器 -->
                <mvc:mapping path="/**"/>
                <bean class="com.kaishengit.controller.interceptor.LoginInterceptor">
                    <!-- 在这里配置了一个叫execludeUrls的property,里面包含了三个请求路径
                        在LoginInterceptor里注入了execludeUrls(定义这个属性,并生成set方法),所以可以写execludeUrls.contains(url),就不用在
                        程序中写死了,如果不这样写,就还用老方法
                        "".equals(url) || "/".equals(url) || "/login".equals(url)-->
                    <property name="execludeUrls">
                        <list>
                            <value></value>
                            <value>/</value>
                            <value>/login</value>
                        </list>
                    </property>
                </bean>
            </mvc:interceptor>
        
        </mvc:interceptors>
  • 相关阅读:
    [USACO08FEB]酒店Hotel 线段树 BZOJ 1593
    有趣的数 zoj 月赛
    [ZJOI2008]生日聚会 BZOJ1037 dp
    借教室 差分+二分答案
    HackerRank
    旅行计划 记忆化搜索
    灾后重建 Floyd
    [USACO10OCT]湖计数Lake Counting 联通块
    [TJOI2013]循环格 费用流 BZOJ3171
    高斯消元
  • 原文地址:https://www.cnblogs.com/itliucheng/p/4432665.html
Copyright © 2011-2022 走看看