关于Struts2拦截器的相关问题。避免在地址栏直接执行Action 本帖最后由 Javainging 于 2012-12-29 12:10:13 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在web.xml里面配置一个自定义的Filter,在Filter中检查用户登录信息,没有就跳到登录页面 额,谢谢,我直接配置的拦截器我可以新建一个package,这个package放的都是一些拦截器。 然后其他package继承这个package嘛,这应该就不需要每个package都写拦截器了吧?? 用拦截器基本就是每个action都要配,提示很简单,比如没有登录让他跳到一个jsp,那个jsp里写个脚本提示后在跳到login.jsp 我可以新建一个package,这个package放的都是一些拦截器。 然后其他package继承这个package嘛,这应该就不需要每个package都写拦截器了吧?? 写一个就够了,让默认的拦截器栈引用它,所有的action都引用这个拦截器栈,我也记不清了,这些都是前任写好的 额,我写了一个package 里面设置了一个 <default-interceptor-ref name="myLogin"></default-interceptor-ref>然后所有的package都继承了这个package,这样的话,他就所有的方法都拦截了,我想要拦截部分方法怎么办呢 估计是前后台吧?只能让后台的继承package吧,前台不用了吧,只要你能明白原理,功能实现了,没有什么方法是不可以的。 恩,原理已经知道了,现在正在调试,呵呵,我的package是根据业务来的,比如,用户 就是一个package 前台+后台的都是,呵呵。没设计好。 额,我是有部分页面、action不需要登陆就可以访问的呢, 有拦截器 还要filter 干啥 如果是一个packet下面不是所有的action都需要进行拦截 那么 你这个登录拦截不能配置成全局的拦截器 这样子的话,你需要进行登录拦截的action需要配置 一下登录拦截器 当然 你可以把不需要登录的action放到一个单独的packet下面 我们都直接写在action的类里:/** * 用户员工action * @version 1.0 */@ActionBean(name = "/user", interceptor = "myInterceptor")public class UserAction extends BaseAction { private static final Logger log = LoggerFactory.getLogger(UserAction.class); private static final String LIST = "/jsp/user/list.jsp"; private static final String ADD = "/jsp/user/add.jsp"; private static final String EDIT = "/jsp/user/edit.jsp"; private static final String PROMPT = "/prompt.jsp"; /** * 员工列表 * @return String */ public String list() { log.info("员工列表"); return LIST; } /** * 添加员工 * @return String */ public String add() { if ("save".equals(paramString(METHOD_NAME))) { try { bean.setNamePY(UtilTool.getBean().getFirstPinyin(bean.getRealName())); bean = mng.add(bean); resetPage(OPERATE_RIGHT, "parent.getUsers();", "添加员工【" + bean.getRealName() + "】成功!"); } catch (Exception e) { resetPage(OPERATE_ERROR, "", OPERATE_ERROR_MESSAGE); } return PROMPT; } setRequestAttr("company", companyMng.get(id)); return ADD; } /** * 编辑员工 * @return String */ public String edit() { if ("update".equals(paramString(METHOD_NAME))) { try { bean.setNamePY(UtilTool.getBean().getFirstPinyin(bean.getRealName())); bean = mng.edit(bean); resetPage(OPERATE_RIGHT, "parent.getUsers();", "编辑员工【" + bean.getRealName() + "】成功!"); } catch (Exception e) { resetPage(OPERATE_ERROR, "", OPERATE_ERROR_MESSAGE); } return PROMPT; } bean = mng.get(id); return EDIT; } /** * 删除员工 * @return String */ public String del() { try { bean = mng.del(id); resetPage(OPERATE_RIGHT, "parent.getUsers();", "删除员工【" + bean.getRealName() + "】成功!"); } catch (Exception e) { resetPage(OPERATE_ERROR, "", OPERATE_ERROR_MESSAGE); } return PROMPT; } @MatchingBean public UserMng mng; private User bean; public User getBean() { return bean; } public void setBean(User bean) { this.bean = bean; }}/** * 项目中的action拦截器 * @version 1.0 */@InterceptorBean(name = "myInterceptor")public class MyInterceptor implements Interceptor { private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class); public String advance(HttpServletRequest request, HttpServletResponse response) throws FrameworkException { log.info("访问地址:" + request.getRequestURI()); System.out.println("你想怎样拦截,就把代码写在这儿吧"); return null; }}xml配置是多余的,访问action的每个方法,都必须通过这个拦截器 你第一步没有在web。xml中配置核心过滤器? 请求各位大侠 我该如何 struts2的Action接受的参数是乱码? j2EE服务器是怎样调用类的 征寻类似中国移动数据表的的设计方案 请教开源的论坛和交友网 大家来看看这个该怎么实现。???????????? 在页面上的java代码如何提取ActionForm的某个属性值 请教关于打包问题 怎样检验一个Java应用程序已经启动 请教:在struts中如何用一个按钮提交同一页面上的两个FORM中的数据? javascript开发和java开发比较那个比较好,或者说javascript开发有什么发展前景 使用struts2异常拦截问题
额,谢谢,我直接配置的拦截器
我可以新建一个package,这个package放的都是一些拦截器。
然后其他package继承这个package嘛,这应该就不需要每个package都写拦截器了吧??
然后其他package继承这个package嘛,这应该就不需要每个package都写拦截器了吧??
额,我写了一个package 里面设置了一个 <default-interceptor-ref name="myLogin"></default-interceptor-ref>然后所有的package都继承了这个package,这样的话,他就所有的方法都拦截了,我想要拦截部分方法怎么办呢
恩,原理已经知道了,现在正在调试,呵呵,我的package是根据业务来的,
比如,用户 就是一个package 前台+后台的都是,呵呵。没设计好。
额,我是有部分页面、action不需要登陆就可以访问的呢,
如果是一个packet下面不是所有的action都需要进行拦截 那么 你这个登录拦截不能配置成全局的拦截器 这样子的话,你需要进行登录拦截的action需要配置 一下登录拦截器
/**
* 用户员工action
* @version 1.0
*/
@ActionBean(name = "/user", interceptor = "myInterceptor")
public class UserAction extends BaseAction {
private static final Logger log = LoggerFactory.getLogger(UserAction.class);
private static final String LIST = "/jsp/user/list.jsp";
private static final String ADD = "/jsp/user/add.jsp";
private static final String EDIT = "/jsp/user/edit.jsp";
private static final String PROMPT = "/prompt.jsp";
/**
* 员工列表
* @return String
*/
public String list() {
log.info("员工列表");
return LIST;
}
/**
* 添加员工
* @return String
*/
public String add() {
if ("save".equals(paramString(METHOD_NAME))) {
try { bean.setNamePY(UtilTool.getBean().getFirstPinyin(bean.getRealName()));
bean = mng.add(bean);
resetPage(OPERATE_RIGHT, "parent.getUsers();", "添加员工【" + bean.getRealName() + "】成功!");
} catch (Exception e) {
resetPage(OPERATE_ERROR, "", OPERATE_ERROR_MESSAGE);
}
return PROMPT;
}
setRequestAttr("company", companyMng.get(id));
return ADD;
}
/**
* 编辑员工
* @return String
*/
public String edit() {
if ("update".equals(paramString(METHOD_NAME))) {
try {
bean.setNamePY(UtilTool.getBean().getFirstPinyin(bean.getRealName()));
bean = mng.edit(bean);
resetPage(OPERATE_RIGHT, "parent.getUsers();", "编辑员工【" + bean.getRealName() + "】成功!");
} catch (Exception e) {
resetPage(OPERATE_ERROR, "", OPERATE_ERROR_MESSAGE);
}
return PROMPT;
}
bean = mng.get(id);
return EDIT;
}
/**
* 删除员工
* @return String
*/
public String del() {
try {
bean = mng.del(id);
resetPage(OPERATE_RIGHT, "parent.getUsers();", "删除员工【" + bean.getRealName() + "】成功!");
} catch (Exception e) {
resetPage(OPERATE_ERROR, "", OPERATE_ERROR_MESSAGE);
}
return PROMPT;
} @MatchingBean
public UserMng mng;
private User bean; public User getBean() {
return bean;
} public void setBean(User bean) {
this.bean = bean;
}}/**
* 项目中的action拦截器
* @version 1.0
*/
@InterceptorBean(name = "myInterceptor")
public class MyInterceptor implements Interceptor {
private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class); public String advance(HttpServletRequest request, HttpServletResponse response) throws FrameworkException {
log.info("访问地址:" + request.getRequestURI());
System.out.println("你想怎样拦截,就把代码写在这儿吧");
return null;
}}xml配置是多余的,访问action的每个方法,都必须通过这个拦截器