java - struts拦截器连登录界面也一起拦截了,无法登录
本文介绍了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屋!
查看全文