struts2 拦截器,该怎么解决
struts2 拦截器
目的:用拦截器实现,当输入为指定的用户名和密码的时候允许登录,否则返回登录页面;
这是action:
配置文件:
login页面只有一个username和一个password文本框和一个登录按钮;
但拦截器不太会写:
这里应该用不到session,只是获取传过来的值不会获取;
请大家看看;
------解决方案--------------------
看看
------解决方案--------------------
在拦截器的配置中注入参数:
然后在你的拦截器类获取参数值:
private String username;
private String password;
并定义Set方法。这样在你的intercept方法就可以拿到你注入的username和password
------解决方案--------------------
action中的实例变量能够在jsp页面中直接访问,是因为使用ongl将实例变量放到了request中的;
而Interceptor中用于过滤,struts认为这个并不直接与jsp页面交互,所以并没有将其中的实例变量放入request中;
------解决方案--------------------
在登陆的action 中 将 用户名 对象 绑定到session
在action包中写一个用来获得session的超类 实现SessionAware接口
protected Map<String, Object> session;
@Override
public void setSession(Map<String, Object> arg0) {
session = arg0;
}
public String execute() {
System.out.println("BaseAction...");
return "success";
}
登陆的action 继承这个父类
做完用户校验后 将用户对象放入session
在拦截器中
Map<String, Object> session = invocation.getInvocationContext().getSession(); 获取session
然后判断就可以了
------解决方案--------------------
你是POST请求还是GET请求啊,用request.getParameter("username")试下。
目的:用拦截器实现,当输入为指定的用户名和密码的时候允许登录,否则返回登录页面;
这是action:
package com.zhang;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.org.apache.xerces.internal.impl.Constants;
public class LoginAction extends ActionSupport
{
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 execute()
{
return "success";
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.ui.theme" value="simple" />
<package name="user" extends="struts-default" namespace="/user">
<interceptors>
<interceptor name="my" class="com.zhang.LoginInterceptor"></interceptor>
</interceptors>
<action name="login" class="com.zhang.LoginAction">
<result>/success.jsp</result>
<result name="login">/login.jsp</result>
<interceptor-ref name="my"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
login页面只有一个username和一个password文本框和一个登录按钮;
但拦截器不太会写:
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class LoginInterceptor implements Interceptor
{
public void destroy()
{
}
public void init()
{
}
public String intercept(ActionInvocation invocation) throws Exception
{
ActionContext action = invocation.getInvocationContext();
String username = (String) action.get("username");//这里该如何获取login.jsp页面传过来的值?
if (null != username && username.equals("zhang"))
{
System.out.println("拦截器:合法用户登录---");
return invocation.invoke();// 继续面拦截器或action
}
else
{
System.out.println("拦截器:用户未登录---");
return "login";// 转登录页面
}
}
}
这里应该用不到session,只是获取传过来的值不会获取;
请大家看看;
------解决方案--------------------
看看
------解决方案--------------------
在拦截器的配置中注入参数:
<interceptor-ref name="loginInterceptor">
<param name="username">user01</param>
<param name="password">123</param>
</interceptor-ref>
然后在你的拦截器类获取参数值:
private String username;
private String password;
并定义Set方法。这样在你的intercept方法就可以拿到你注入的username和password
------解决方案--------------------
action中的实例变量能够在jsp页面中直接访问,是因为使用ongl将实例变量放到了request中的;
而Interceptor中用于过滤,struts认为这个并不直接与jsp页面交互,所以并没有将其中的实例变量放入request中;
------解决方案--------------------
在登陆的action 中 将 用户名 对象 绑定到session
在action包中写一个用来获得session的超类 实现SessionAware接口
protected Map<String, Object> session;
@Override
public void setSession(Map<String, Object> arg0) {
session = arg0;
}
public String execute() {
System.out.println("BaseAction...");
return "success";
}
登陆的action 继承这个父类
做完用户校验后 将用户对象放入session
在拦截器中
Map<String, Object> session = invocation.getInvocationContext().getSession(); 获取session
然后判断就可以了
------解决方案--------------------
你是POST请求还是GET请求啊,用request.getParameter("username")试下。