AOP拦截器简单配置及应用-SSM项目

AOP拦截器使用步骤记录


  • 写一个普通类MyInterceptor implements HandlerInterceptor(实现spring的拦截器接口)
  • 实现接口的所有方法
    • preHandle(相当于前置拦截器:指定需要拦截的方法执行之前 ,需要执行哪些处理)
    • afterCompletion(相当于后置拦截器:指定需要拦截的方法执行完成之后 ,需要执行哪些处理)
    • postHandle(提交过程中要处理的事情)
  • SpringMVC.xml中配置拦截器
    <!-- 拦截器的配置 -->
    <mvc:interceptors>
        <bean class="org.kuwei.interceptor.MyInterceptor">
            <!-- 声明需要不拦截的方法的URI
                或者也可以声明需要拦截的URI,根据MyInterceptor 拦截器里面的内容进行随需要修改
             -->
            <property name="notIncludeURIS">
                <list>
                    <value>/ssm-nurse-hobby/nurse/login.cc</value>
                    <value>/ssm-nurse-hobby/nurse/toLogin.cc</value>
                </list>
            </property>
        </bean>
    </mvc:interceptors>
  • 在自定义拦截器中进行处理
import org.springframework.web.servlet.HandlerInterceptor;


public class MyInterceptor implements HandlerInterceptor {
    //必须提供set方法,否则不能获取配置文件中的信息
    // 自动读取springmvc配置文件中配置的不需要拦截的方法  <property name="notIncludeURIS">
    List<String> notIncludeURIS;

    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {

    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {

    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {

        boolean f = false;

        // 获取session中的对象(登录成功会在session作用域放一个当前登录的对象)
        Nurse nurse = (Nurse) request.getSession().getAttribute("nurse2");

        // 获取当前访问 触发的URI路径
        String requestURI = request.getRequestURI();

        // 当前的请求路径 与 不需要拦截的URI集合 进行比较 判断是否包含

        if (notIncludeURIS.contains(requestURI)) { // 不需要拦截
            f = true;
        } else {
            if (nurse != null) { // 已登录,不需要拦截
                f = true;
            } else { // 需要拦截
                f = false;
                //放置提示信息
                request.getSession().setAttribute("login_msg", "非法访问!请先登录");
                // 转发到登录页面
                request.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(request, response);
            }
        }

        return f;
    }

    /**
     * 功能:getters and setters
     * 
     * @kuwei 2017年4月28日下午2:51:13
     */
    public List<String> getNotIncludeURIS() {
        return notIncludeURIS;
    }

    public void setNotIncludeURIS(List<String> notIncludeURIS) {
        this.notIncludeURIS = notIncludeURIS;
    }

}

  • 其他页面
@RequestMapping("/nurse")
@Controller
public class NurseController {

    @Resource(name = "nurseService")
    private NurseService nurseService;

    @RequestMapping("/list.cc")
    public String list(HttpServletRequest request, Nurse nurse) {
        List<Nurse> list = nurseService.getList();
        request.setAttribute("list", list);
        return "nurse_list";
    }

    @RequestMapping("/login.cc")
    public String login(HttpServletRequest request, Nurse nurse) {
        Nurse nurse2 = nurseService.findNurseByNurse(nurse);
        HttpSession session = request.getSession();
        if (nurse2 != null) {
            session.setAttribute("nurse2", nurse2);
            return "redirect:list.cc";
        } else {
            request.setAttribute("login_msg", "账号或密码错误,请重新登录");
            return "login";
        }
    }

    @RequestMapping("/toLogin.cc")
    public String toLogin() {
        return "login";
    }

    /**
     * 功能:getters and setters
     * @kuwei 2017年4月28日下午4:47:17
     */
    public NurseService getNurseService() {
        return nurseService;
    }

    public void setNurseService(NurseService nurseService) {
        this.nurseService = nurseService;
    }

}

很多知识点长时间不用会遗忘,博客是个很好的记录工具

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fool_dawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值