鲜花网站项目(四)————登陆验证拦截器和错误页的相关配置

  我们会对进行登陆校验的action使用默认拦截器,这样他就不会被我们设置的拦截器拦截,验证成功后,我们会往session中存入一个数据,然后没有登陆的用户并且需要登录验证拦截器功能的action模块会根据我们的拦截器的进行拦截,拦截的依据就是判断session中有没有我们要的东西,如果有,就放行不予拦截,如果没有,直接拦截,转到eroor页面,让他进行登陆。

public class LoginInterceptor extends AbstractInterceptor{

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        // TODO 自动生成的方法存根
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        String rol =  (String)session.getAttribute("role");
        if(rol!=null && rol.length() > 0){
        if(rol.equals("custom")||rol.equals("admin")){
            return arg0.invoke();
        }
        }
        return "LOGIN";
        
        
    }

}

拦截器中传入的对象是获取不到session的,这个我也不清楚为什么,所以我只能利用通用的调用web资源方式获取session

struts.xml文件中这样配置全局拦截器

     <interceptors>
                <!-- 定义权限控制拦截器 -->
                <interceptor name="myInterceptor"
                    class="com.jikexueyuan.interceptor.LoginInterceptor" >
                    
                    </interceptor>
                <!-- 定义一个包含权限控制的拦截器栈 -->
                <interceptor-stack name="mydefault">

                     <interceptor-ref name="myInterceptor">
                         
                     </interceptor-ref>
                     <interceptor-ref name="defaultStack"/>
                </interceptor-stack>
            </interceptors>
            
        <default-interceptor-ref name="mydefault" />
        <!-- 定义全局处理结果 -->
        <global-results>
            <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
            <result name="LOGIN">/user/login.jsp</result>
        </global-results>

jsp页面分为两种,一种是需要在数据库中调用数据的页面,另一种是不需要在后台数据库调用数据的页面。

详细说说第一种,从后台数据库中调用数据的jsp,

  • 他的数据来源肯定是action传递给他的,如果我们用上面的配置文件及拦截器,通过访问action进而访问jsp,if我们没有登陆,session中不会有值,那么这个action将不会正常发生跳转,而是转到login.jsp页面。
  • 如果我们直接访问没有登陆的从后台数据库中调用数据的jsp页面,注意不是action,action会因为没有session值而跳转登录页面,而jsp是可以直接访问的,但是这样的话会报错,因为这种jsp本来应该是由action传递数据到jsp,但是我们没有访问action,而是跳过action直接访问jsp,就会因为空指向而报错。这样就要配置错误页来帮助我们跳转的登录页,这样配置

     <%@ page errorPage="/error/error.jsp" %> 

这个错误页也需要配置一下

<%@ page isErrorPage="true" %>

我们跳转到错误页面是为了,提示出错,然后帮助用户跳转的登陆页面。错误页面代码如下

  error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<%
String path = request.getContextPath();
%>

<!DOCTYPE HTML>
<html>
  <head>    
    <title>出错了!</title>
    <meta http-equiv='refresh' content='5;url=<%=path %>/user/login.jsp'>
    <link rel="stylesheet" type="text/css" href="<%=path %>/css/error.css">
    <script type="text/javascript" src="<%=path%>/js/error.js"></script>
  </head>
  
  <body>
   <img src="<%=path %>/img/error.png" >
    <h4>注意!!页面将在<div id='num' class="inline">5</div>秒后跳转</h4>
  </body>
</html>

  这个页面的css代码如下

div.inline{
    display: inline-block; width: 50px;text-align: center;
}
h4{
    margin-left: 50px;
}

  js代码如下

var i=5;
function getTime(){
    document.getElementById('num').innerHTML="<font color='red'>"+i+"</font>";
    i-=1;
    var x=setTimeout('getTime()',1000)
    if(i<=0){
        clearTimeout(x);
    }
}
window.onload=getTime;

 

posted @ 2017-03-12 19:53  我们不该这样的  阅读(143)  评论(0编辑  收藏  举报