我有一个用Struts 1编写的遗留应用程序。我被要求添加的唯一功能是保护某些操作。目前,任何用户都可以做任何他/她想要的事情。这个想法是允许所有用户查看数据,但是阻止修改操作,即修改用户应该登录的数据。
我知道Struts2有拦截器,因此我可以将它们附加到所需的操作,并在需要时转发用户登录页面。但是我如何在Struts 1应用程序中做类似的事情?
我的第一个想法是创建我自己的抽象Action类:
public class AuthenticatedAction {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest theRequest,
HttpServletResponse theResponse) {
if (!logged) {
// forward to log in form
} else {
doExecute(mapping, form, request, response);
}
}
public abstract ActionForward doExecute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest theRequest,
HttpServletResponse theResponse);
}
然后从
更改需要身份验证的所有操作extends Action
到
extends AuthenticatedAction
然后添加登录表单,登录操作(执行身份验证并将此状态置于会话中)并更改JSP标题磁贴以显示身份验证块,例如“您是(未登录)/”,登录/注销。我猜这应该可以解决问题。
提前谢谢。
答案 0 :(得分:2)
我猜您可以使用过滤器来满足您的要求。 您可以在web.xml中声明一个过滤器,并提供适用它的URL模式。
< filter>
< filter-name>filterName< /filter-name>
< filter-class>filter.class</filter-class>
< filter-mapping>
< filter-name>filterName< /filter-name>
< url-pattern>*.*< /url-pattern>
< /filter-mapping>
相关链接为here
答案 1 :(得分:0)
我认为好的方法是在web.xml中创建过滤器类make项 现在,你的过滤器做了如下编码
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("coming from globester filtersss 2");
HttpServletRequest requesth = (HttpServletRequest) request;
HttpServletResponse responseh = (HttpServletResponse) response;
HttpSession session = requesth.getSession();
String ss=requesth.getParameter("cat");
if(ss!=null && ss.equalsIgnoreCase("trues")){
}else{
responseh.sendRedirect("searchSanta.jsp?cat=trues");
}
}