Я пытаюсь использовать Interceptor
, чтобы ограничить пользователей выполнением определенных действий.Использование Interceptor для проверки прав доступа пользователей
ContainsKeyInterceptor
:
public class ContainsKeyInterceptor extends AbstractInterceptor implements SessionAware {
private static final long serialVersionUID = 1L;
private Map<String, Object> session;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
if(session == null) {
System.out.println("session is null");
}
if(session.containsKey("currentId")) {
return "index";
}
String result = actionInvocation.invoke();
return result;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
Предполагается перенаправить пользователя на страницу индекса, если currentId
находится в session
.
Однако, я получаю NullPointerException
, заявив, что session
имеет значение null, что подтверждено if-check.
struts.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="false" />
<!-- actions available to guests -->
<package name="guest" extends="struts-default">
<interceptors>
<interceptor name="containskeyinterceptor" class="com.mypackage.interceptor.ContainsKeyInterceptor" />
</interceptors>
<action name="index" class="com.mypackage.action.IndexAction">
<interceptor-ref name="containskeyinterceptor" />
<result type="redirect">/index.jsp</result>
<result name="index" type="redirect">/index.jsp</result>
</action>
<action name="login" class="com.mypackage.action.LoginAction">
<interceptor-ref name="containskeyinterceptor" />
<result type="redirect">/index.jsp</result>
<result name="input">/login.jsp</result>
<result name="index" type="redirect">/index.jsp</result>
</action>
</package>
<!-- actions available to members -->
<package name="member" extends="struts-default">
<action name="logout" class="com.mypackage.action.LogoutAction">
<result type="redirectAction">
<param name="actionName">index</param>
</result>
</action>
</package>
</struts>
Почему session
утратившим как решить?
(This была ссылка, которую я использовал.)
Привет Андреа, когда я получу Сессионную карту, и когда я получу реальный объект HttpSession? – silver
Обычно вам нужна только карта. –
Спасибо, это сработало! Я использовал карту сеанса и подход «определить дважды», теперь я буду экспериментировать с ''. Продвинутый и отмеченный принятый ответ. –
silver