gpt4 book ai didi

spring - SessionAware 不注入(inject) session 对象

转载 作者:行者123 更新时间:2023-12-04 14:45:05 26 4
gpt4 key购买 nike

我又来了一个关于 s2 的问题,我是初学者,在找例子时遇到了一些麻烦。

我正在构建一个依赖于登录的菜单服务,当用户进入起始页时会提供该登录。登录完成后,我通过执行以下操作将用户对象存储到 session 中:

@Override
public String intercept(ActionInvocation invocation) throws Exception {
....

// verifica se o parametro do CPF veio no get e tenta logar o usuario
if (!StringUtils.isBlank(request.getParameter(USER_CPF_REQUEST))) {

if ( doLogin(request, session) ) {
return Action.SUCCESS;
}

然后是doLogin方法

Usuario usuario = getServico().buscar( Long.valueOf(cpf) );
//Caso o usuário exista, guarda na session
if (usuario != null){
session.setAttribute(USER_HANDLE, usuario);
return true;
}

现在问题来了,我通过 ApplicationContext.xml 上的以下 xml 片段在 MenuAction 上注入(inject)了一个 MenuBean

<bean id="menuService" class="br.com.autenticis.renacon.ejb.MenuBean" />

<bean id="menuAction" scope="prototype" class="br.com.autenticis.renacon.actions.MenuAction">
<constructor-arg ref="menuService" />
</bean>

menuAction 声明如下:

public class MenuAction extends ActionSupport implements Preparable, SessionAware

这样做我需要用私有(private)成员实现 session 集

private Map<String, Object> session;
....
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}

下面所有方法的失败部分, session 对象在调试时为空:

    public String execute() {
if ( session.containsKey( LoginInterceptor.USER_HANDLE) ){
Usuario u = (Usuario) session.get( LoginInterceptor.USER_HANDLE);
setMenu( servico.getMenuPerfil( u.getPerfil() ) );
return Action.SUCCESS;
}

return input();
}

有人知道为什么吗?或者如何实现?查看上面的代码,我需要登录用户的“Perfil”,如果 session 包含用户对象的 key ,我会得到它,然后使用 perfil 通过 setter 填充菜单并返回 SUCESS,否则它'将返回 INPUT,这将导致登录屏幕。

最佳答案

在我们的一些之后,我设法发现了错误。这不在程序中,而是在 struts.xml 中,我为应用程序编写了一个自定义堆栈:

<!-- stack seguro --> 
<!--
<interceptor-stack name="defaultLoginStack">
<interceptor-ref name="logger" />
<interceptor-ref name="params" />
<interceptor-ref name="login" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="staticParams" />
<interceptor-ref name="params" />
<interceptor-ref name="conversionError" />
<interceptor-ref name="validation" />
<interceptor-ref name="workflow" />
</interceptor-stack>
-->

还有点忘了包含session相关的项,defaultLoginStack改为

<interceptor-stack name="defaultLoginStack"> 
<interceptor-ref name="login" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>

我现在可以正确使用 session 注入(inject)了。

关于spring - SessionAware 不注入(inject) session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/752186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com