2011-01-07 5 views
2

У меня есть вопрос о структуре Stripes.Полосы - перенаправление, срок действия истекает

Эта страница перенаправления в методе аннотации раньше?

что-то вроде:

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

ответ

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.

0

Hm. Это не приятно.

Кодирование кода во всех способах.


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

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

Итак, я иду читать Перехватчик безопасности полос.

Спасибо.

+0

Конечно, Вы можете также написать свой собственный перехватчик: http://www.stripesframework.org/display/stripes/Intercept+Execution (это очень легко!) – Kdeveloper

0

Я думаю, что ваша проблема заключается в перенаправлении пользователя на страницу входа в систему, когда они не вошли в систему. Использование @before для каждого actionBean - это не очень хорошая идея. Для этого вы можете сделать свой собственный перехватчик, расширив 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; 
    } 

} 
Смежные вопросы