为什么输入密码正确才能访问如果直接访问action 出现错误,密码输错也会报错

来源:5-3 创建自定义拦截器及拦截器栈实现权限校验

丶子非鱼

2017-05-14 15:13

public class LoginAction extends ActionSupport implements SessionAware{
private String username;
private String password;
 private Map<String,Object> session;
 /*
  * 该方法是获取session对象
  * (non-Javadoc)
  * @see org.apache.struts2.interceptor.SessionAware#setSession(java.util.Map)
  */
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session=session;
}
         public String login(){
           if("admin".equals(username) && "123".equals(password)){
           	session.put("username",username);
           	return SUCCESS;
           }
           else{
           	session.put("usernameerror","用户名输入不正确");
           	return ERROR;
           }
         }
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;
}

         
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="default" namespace="/" extends="struts-default">
    <interceptors>
    <interceptor name="LoginInteceptor" class="com.inteceptor.LoginInteceptor"></interceptor>
    </interceptors>
    <action name="auth">
<result>/WEB-INF/page/user.jsp</result>
<result name="login">/index.jsp</result>
<!-- 引用自定义的拦截器 -->
<interceptor-ref name="LoginInteceptor"></interceptor-ref>

</action>

      <action name="LoginAction" method="login" class="com.action.LoginAction">
      
      <result>/WEB-INF/source/user.jsp</result>
      <result name="ERROR">/index2.jsp</result>
      
      </action>
    </package>
</struts>
public class LoginInteceptor extends AbstractInterceptor {

	

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//获取用户上下文
		ActionContext context=ActionContext.getContext();
		Map<String,Object> session=context.getSession();
		if(session.get("username")!=null){
			String result=invocation.invoke();
			System.out.println(result);
			return result;
		}
		else{
			return "login";
		}
		
	}

}
<h2>用户登录</h2>
   ${usernameerror}
    <form action="LoginAction.action" method="post">
     用户名: <input type="text" name="username" value=""/>
     密码:  <input type="password" name="password" value="">
     <input type="submit" value="登录"/>
    </form>


写回答 关注

2回答

  • 罗毅豪
    2017-05-15 19:39:09

     <interceptors>

        <interceptor name="LoginInteceptor" class="com.inteceptor.LoginInteceptor"></interceptor>

        </interceptors>

    改成

    <interceptors>

    <interceptor name="LoginInteceptor" class="com.inteceptor.LoginInteceptor"></interceptor>

    <interceptor-stack name="my">

    <interceptor-ref name="defaultStack"></interceptor-ref>

    <interceptor-ref name="LoginInteceptor"></interceptor-ref>

    </interceptor-stack>

    </interceptors>


    <interceptor-ref name="LoginInteceptor"></interceptor-ref>改成

    <interceptor-ref name="my"></interceptor-ref>

    丶子非鱼

    没有就会这样吗

    2017-05-16 18:51:26

    共 1 条回复 >

  • 罗毅豪
    2017-05-15 19:36:53

    是不是自定义拦截器栈时没有引用defaultStack?

Struts2拦截器浅析

本视频教程将代领大家了解Struts2拦截器的工作原理及配置

37980 学习 · 118 问题

查看课程

相似问题