日期:2014-05-19  浏览次数:20635 次

关于Struts2拦截器的相关问题。避免在地址栏直接执行Action
本帖最后由 Javainging 于 2012-12-29 12:10:13 编辑
之前系统开发的时候,没有考虑到用户不登陆,直接在浏览器输入action地址进行操作的情况。
例如:

对于如下链接:


http://localhost:8080/OrderS/trainInfo/delete.action?id=5


这样就直接删除了id为5的那个培训信息。后来用了拦截器,请问下,拦截器是不是每个package都要引入啊?
想问的是,如果他直接输入地址,我应该给他个警告信息,这个改咋判断呢。

<package name="SSH" namespace="/ssh" extends="struts-default">

<interceptors>
<interceptor name="login" class="com.xing.util.LoginInterceptor"></interceptor>
<interceptor-stack name="myLogin">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myLogin"></default-interceptor-ref>

<global-results>
<result name="login" type="redirect">/admin/login.jsp</result>
</global-results>

<!--删除 信息 -->
<action name="deleteAction" class="com.xing.action.InstrumentAction"
method="delete">
<result name="success">/admin/instrument/success.jsp</result>
</action>
<!-- 超级管理员 删除  -->
<action name="deleteAction1" class="com.xing.action.NoticeAction"
method="delete">
<result name="success">/admin/notice/success.jsp</result>
</action>

<!-- 普通管理员 删除  -->
<action name="deleteAction2" class="com.xing.action.NoticeAction"
method="delete">
<result name="success">/manager/notice/success.jsp</result>
</action>
</package>


是不是我以后的每个package都得加下面的几行代码啊?
谢谢。

<interceptors>
<interceptor name="login" class="com.xing.util.LoginInterceptor"></interceptor>
<interceptor-stack name="myLogin">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myLogin"></default-interceptor-ref>

<global-results>
<result name="login" type="redirect">/admin/login.jsp</result>
</global-results>





LoginInterceptor 如下:

public class LoginInterceptor extends AbstractInterceptor {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@SuppressWarnings("unchecked")
@Override
public String intercept(ActionInvocation invocation) throws Exception {

String name = invocation.getInvocationContext().getName();
if(name.equals("login"))
{
//如果用户想登陆,则使之通过
return invocation.invoke();
}
else
{
ActionContext ac = invocation.getInvocationContext();
Map session = (Map)ac.get(ServletActionContext.SESSION);
if(session==null)
{
//如果session为空,则让用户登陆
return "login";
}
else
{
String adminname = (String)session.get("adminname");
if(