Spring mvc拦截器+angular js拦截器 做用户登录拦截控制

前端使用angular js、后台使用java做用户的登录控制。当用户未登录时自动跳转到登录页面。

用户登录成功添加session:

    HttpSession session=request.getSession();

            UserToken usertoken=new UserToken();
            usertoken.setNickname((String)map.get("nickname"));
            ...
            usertoken.setUsername((String)map.get("username"));


            /*
             * 设置session
             */     
            session.setAttribute("userToken", usertoken);
            //超时时间20分钟
            session.setMaxInactiveInterval(60*20);

拦截器配置文件代码
applicationContext.xml

    <!--     登录拦截 -->
    <mvc:interceptors>
        <mvc:interceptor>
        <!--    拦截全部地址 -->
            <mvc:mapping path="/**" />
            <!-- 登录拦截类 -->
            <bean id="loginInterceptor" 
            class="com.beicheng.user.interceptor.LoginInterceptor">
            </bean>
        </mvc:interceptor>
    </mvc:interceptors> 

Spirng 拦截器控制类代码
试过在preHandle中使用response.sendRedirect(request.getContextPath()
+”auth/login.html”)做自动跳转没成功,后来直接修改返回的状态码,在前端进行拦截处理

public class LoginInterceptor implements HandlerInterceptor {    
    //日志  
    private static  Log logger=LogFactory.getLog(LoginInterceptor.class);

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
            Object handle) throws Exception {  

        //创建session  
        HttpSession session =request.getSession();  

        //无需登录,允许访问的地址  
        String[] allowUrls =new String[]{"/logininfo","/login"};  

        //获取请求地址  
        String url =request.getRequestURL().toString();  

        //获得session中的用户  
        //userToken是自定义的类,当用户登录成功后向session中添加的
        UserToken user =(UserToken) session.getAttribute("userToken");  


        for (String strUrl : allowUrls) {  
            if(url.contains(strUrl))  
            {  
                return true;  
            }  
        }  

        if(user ==null)  
        {  
            //状态码 401 表示用户未登录
             response.setStatus(401);

               return false;

        }           
        return true;

    }  

    public void postHandle(HttpServletRequest request,  
            HttpServletResponse response, Object handler,  
            ModelAndView modelAndView) throws Exception {  

    }  

    public void afterCompletion(HttpServletRequest request,  
            HttpServletResponse response, Object handler, Exception ex)  
            throws Exception {  


    }

angular js拦截器代码

//登录拦截
app.config(function ($httpProvider) {
  $httpProvider.interceptors.push('AuthInterceptor');
})
app.factory('AuthInterceptor', function ($rootScope, $q,$location) {


  return {

    requestError:function(request){


         return $q.reject(response);
    },

    responseError:function (response) {

        console.log(response);

        if(response.status=='401')
        {
            alert("登录超时!");
            $location.url('/auth/login');
        }
      return $q.reject(response);
    }
  };
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值