java - struts拦截器连登录界面也一起拦截了,无法登录

查看:155
本文介绍了java - struts拦截器连登录界面也一起拦截了,无法登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.最近在学习struts2的拦截器。配置了一个登陆的拦截器。可是在输入登录信息后,打断点发现,直接进入拦截器,未先进入相应的Action中将登录信息保存在session中,导致拦截器一直给跳转到登录页。
拦截器配置如下:

public class AuthInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation actionInvocation) throws Exception{
    //1.获取访问的url
    String url = actionInvocation.getProxy().getActionName();
    //2.从session中获取相应的登录用户和是否是管理员
    String username = (String) ActionContext.getContext().getSession().get("loginUser");
    Boolean isAmin = (Boolean) ActionContext.getContext().getSession().get("isAdmin");
    //3.根据地址判断是否已经可以授权访问
    if(url.startsWith("admin_")){
        if(username == null || "".equals(username.trim())){
            return "loginInput";
        }
        if(isAmin == null || !isAmin){
            return "error";
        }
    }else{
        if(username == null || "".equals(username.trim())){
            return "loginInput";
        }
    }
    return actionInvocation.invoke();
    }
   }
   

struts.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="default" namespace="/" extends="struts-default">
    <interceptors>
        <!--创建了一个拦截器的配置,但是此时配置并没有生效,需要在action中配置才能生效-->

        <interceptor name="authInterceptor" class="com.van.interceptor.AuthInterceptor"></interceptor>
        <!--一个拦截器栈中可以加入多个拦截器-->
        <interceptor-stack name="authStack">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <interceptor-ref name="authInterceptor"></interceptor-ref>
        </interceptor-stack>
    </interceptors>
    <!--全局结果集:公共的结果集,所有action只要找到相应的返回值就会来对应全局结果集-->
    <global-results>
        <result name="error">/WEB-INF/inc/error.jsp</result>
        <result name="loginInput">/WEB-INF/Login/input.jsp</result>
    </global-results>
    <action name="*_*_*" class="com.van.action.{2}Action" method="{3}">
        <interceptor-ref name="authStack"></interceptor-ref>
        <result>/WEB-INF/{2}/{3}.jsp</result>
        <result name="redirect" type="redirect">${url}</result>
    </action>

</package>
</struts>

LoginAction如下:

 package com.van.action;

 import com.opensymphony.xwork2.ActionContext;
public class LoginAction {
private String username;
private String password;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String input(){
    return "success";
}

public String login(){
    //获取session的第一种方法
    if(username.equals("admin")){
        ActionContext.getContext().getSession().put("iaAdmin",true);
    }
    ActionContext.getContext().getSession().put("loginUser",username);
    ActionContext.getContext().put("url","/WEB-INF/user_Article_add");
    return "redirect";
}

public String logout(){
    ActionContext.getContext().getSession().clear();
    ActionContext.getContext().put("url","/WEB-INF/common_Login_input");
    return "redirect";
}

}
地址栏输入信息如下:
http://localhost:8080/sturts/...


点提交后,断点显示直接进入拦截器中,未先进入LoginAction的login方法进行session的配置。

解决方案

你需要在拦截器里判断是不是在登录啊。

这篇关于java - struts拦截器连登录界面也一起拦截了,无法登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆