struts2 登录 跳转 方法 动态 请求页

实现的功能:在需要用户登录才能浏览的页前加拦截器,跳转到登陆页,登录后自动跳转到请求页;
1.让interceptor 获取 跳转信息 respones.setAttribute("nextAction",request.getServletPath()+"?"+request.getQuery()),login.jsp里get出来放到hidden里,action接受后return "success"; 在struts.xml中设置 result type=redirect   跳转到${next},成功;
2.还可以通过chain,resultType(共享值栈,相当于2个action共享field),先用loginAction获取到QueryString,实现太麻烦,不灵活,舍弃;

public class LoginInterceptor extends AbstractInterceptor {
	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		if(arg0.getInvocationContext().getSession().get("name")==null){
			HttpServletRequest request=ServletActionContext.getRequest();
			request.setAttribute("nextAction", request.getServletPath()+"?"+request.getQueryString());
			return "reLogin";
		}
		
		return arg0.invoke();	
	}

}

login.jsp
<input type="hidden" name="nextAction" value="<%=request.getAttribute("nextAction") %>"/>


struts.xml
<interceptors>
			<interceptor name="loginInterceptor"
				class="p2world.sshBbs.interceptor.LoginInterceptor" />
		</interceptors>

		<global-results>
			<result name="reLogin">login.jsp</result>
		</global-results>
<action name="login" class="loginAction">
			<result name="success" type="redirect">${nextAction}</result>
			<result name="fail" type="redirect">fail.jsp</result>
		</action>


loginAction
	private String nextAction;

	public String execute() throws IOException{
		System.out.println(nextAction);
//		HttpServletResponse response=ServletActionContext.getResponse();
		password=new MD5Code().getMD5ofStr(password);
		User u=new User();
		u.setName(name);
		u.setPassword(password);
		if(userService.login(u)){
			ActionContext.getContext().getSession().put("name", name);
//			response.sendRedirect(nextAction);
			return "success";
		}else {
			return "fail";
		}
	}

你可能感兴趣的:(jsp,xml,struts,浏览器)