Maven项目学习(二)SSM项目中避免用户跳过登录操作利用url地址直接进行操作系统数据

因为浏览器的url是可以让人任意输入网址进行访问的,在一个项目中,我们不可能让用户不进行操作就能利用url直接访问系统,因此这篇文章主要讲如何避免这个问题。

首先,解决上述的问题,我们利用拦截器技术就可以解决。

在进行实验之前,我们首先要知道拦截器与过滤器的区别是什么?先啰嗦一下

在我们需要对用户的某个请求进行干预,而这种干预称为拦截,是通过拦截器拦截的!

而过滤器是用来过滤网站某些资源的,是不经过用户请求的。比如说我们的项目都要进行编码过滤器,因为我们在项目中用的是中文或者其他除英文外的文字,不进行编码过滤是会造成乱码的。而这个过滤是不经用户操作的,因此称为过滤器,而不是拦截器。

(以上感觉说的不尽是全对,意思上类似)

好了,现在开始实验!

1.在包中添加一个拦截器类LoginInterceptor

(不清楚我项目结构和内容的可以在我这系列上一篇的文章可以看到)

LoginInterceptor类:

这个类重写org.springframework.web.servlet.HandlerInterceptor的接口方法;

preHandle()方法是在用户访问前做什么,因此我们在用户不登录系统进行系统内部操作前进行拦截!

1.我们通过httpServletRequest.getRequestURI();获取当前的url地址。

2.我们进行拦截的是包含login(大写Login通过toLowerCase方法变成全部字母为小写)的url,如果当前的url跟login有关,则不进行拦截,返回true。

3.在处理登录的Controller的方法里,如果用户登录成功,我们使用Httpsession添加参数为“user”并添加值。(这个可以在我这系列上一篇的文章web层的LoginController文件中的login()方法可以看到)

4.回到这个类,如果用户已经登录过了,服务器里有其session值,如果其进行系统内部操作这种情况我们要放行!因此在此类中我们获取session中的user的值,检查其是否为空,如果其存在,则放行!

5.如果用户没登录又直接访问系统内部路由,则返回false,进行拦截!并重定向到路由/to_login。

package com.myhomes.global;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

        String url = httpServletRequest.getRequestURI();
        if(url.toLowerCase().indexOf("login")>=0){
            return true;
        }

        HttpSession session = httpServletRequest.getSession();
        if(session.getAttribute("user")!=null){
            return true;
        }
        httpServletResponse.sendRedirect("/to_login");
        return false;
    }

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

xml文件配置拦截器

启动tomcat并进行操作

这里是控制器路由,有多个路由方法。

1.先未登录,在url直接访问登录后的self路由成功拦截的话会回到to_login路由(因为我成功了网页直接跳转回登录界面理由,就没有放图)

2.成功登录后不进行退出系统操作,返回登录界面后继续访问访问登录后的self路由,如果成功就完成了拦截!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值