条纹 - 重定向,到期会话

时间:2011-01-07 18:52:50

标签: java stripes

我有一个Stripes框架问题。

此注释方法中的重定向页面?

类似的东西:

@Before
public void test()
{
  String login=(String)context.getRequest().getSession().getAttribute("login");
  if (login==null)
  {
    Redirect...(LoginActionBean.class);  // ??????
    exit....();                                    // ??????
  }
}

3 个答案:

答案 0 :(得分:1)

我认为你尝试做这样的事情:

public class MyPageActionBean implements ActionBean {
  private ActionBeanContext context;

  public ActionBeanContext getContext() {
    return context;
  }

  public void setContext(ActionBeanContext context) {
    this.context = context;
  }

  @DefaultHandler
  public Resolution view() {
    String login =
      (String)context.getRequest().getSession().getAttribute("login");
    if (login==null) {
      return new RedirectResolution(LoginActionBean.class);
    } else {
      // do you're normal stuff here
    }
  }
}

但更完整的安全解决方案是实施Stripes Security Interceptor

答案 1 :(得分:0)

嗯。这不好。

所有方法中的重复代码。


public Resolution view1()
{
  String login=....
  if () {...}
  else  {...}
}

public Resolution view2()
{
  String login=....
  if () {...}
  else  {...}
}
public Resolution view3()
{
  String login=....
  if () {...}
  else  {...}
}

所以,我去阅读Stripes Security Interceptor。

感谢。

答案 2 :(得分:0)

我认为您的问题是在用户未登录时将其重定向到登录页面。在每个actionBean上使用 @before 并不是一个好主意。为此,您可以通过扩展Sp​​ringInterceptorSupport来创建自己的拦截器。

@Intercepts(LifecycleStage.ActionBeanResolution)
public class MyInterceptor extends SpringInterceptorSupport {
private static final List<Class<? extends ActionBean>> ALLOW = Arrays.asList(LoginActionBean.class, anyOtherActionBeanAllowedWithoutLogin.class);

@Override
  @SuppressWarnings({ "rawtypes" })
  public Resolution intercept(ExecutionContext execContext) throws Exception {
    Resolution resolution = execContext.proceed();
    ActionBean actionBean = execContext.getActionBean();
    Class<? extends ActionBean> destinationclass = actionBean.getClass();
    if (!ALLOW.contains(destinationclass) && !isSessionExist()) {
      resolution = new RedirectResolution(LoginActionBean.class);
    }
    return resolution;

  }

  private boolean isSessionExist() {
    String login = (String)context.getRequest().getSession().getAttribute("login");
    return login != null;
  }

}