我有一个Stripes框架问题。
此注释方法中的重定向页面?
类似的东西:
@Before
public void test()
{
String login=(String)context.getRequest().getSession().getAttribute("login");
if (login==null)
{
Redirect...(LoginActionBean.class); // ??????
exit....(); // ??????
}
}
答案 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 并不是一个好主意。为此,您可以通过扩展SpringInterceptorSupport来创建自己的拦截器。
@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;
}
}