首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tomcat 7中保护多个war文件

如何在tomcat 7中保护多个war文件
EN

Stack Overflow用户
提问于 2013-07-23 07:11:57
回答 1查看 678关注 0票数 0

我需要关于如何在我当前的Java网站上获得最大安全的建议。

我已经将这两个应用程序部署在Centos6服务器上端口8080的tomcat-7的一个实例下。

.war文件

  • website.war (上下文名称是根)
  • processor.war (上下文名称是处理器)

批罐

  • batch.jar

安全需求

  • website.war是可公开访问的。不需要保安
  • processor.war从website.war获得HTTP请求,并返回要显示给用户的网站结果。
  • batch.jar在服务器的后台运行,所以我想除了安全服务器之外,不需要其他安全性。

目前,我已将其添加到web.xml of processor.war以保护以下内容

  • 只有在tomcat-users.xml文件中具有“user”角色的用户和pass设置的请求才能访问/process url。
  • 只有在tomcat-users.xml文件中具有“admin”角色的用户和传递设置的请求才能访问/admin url。

下面是我对processor.war的web.xml文件的配置。

代码语言:javascript
复制
  <security-constraint> 
    <web-resource-collection> 
        <web-resource-name>Admin</web-resource-name> 
        <url-pattern>/*</url-pattern> 
    </web-resource-collection>
    <auth-constraint> 
        <role-name>admin</role-name> 
    </auth-constraint>
 </security-constraint> 
  <security-constraint> 
    <web-resource-collection> 
        <web-resource-name>Public</web-resource-name> 
        <url-pattern>/processor/process*</url-pattern> 
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
        <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

这够安全吗?我读过攻击者可以伪造请求并读取HTTP请求中的密码。我只想确保processor.war的安全

  • 只有website.war (本地主机:8080)可以将请求发送到processor.war本地主机:8080/处理器/进程
  • 而且只有管理员用户可以访问本地主机:8080/processor/ admin页面。

有人能告诉我更多的安全是必要的吗?如果是的话,我能做些什么来确保它的安全?

EN

回答 1

Stack Overflow用户

发布于 2016-05-13 23:48:52

我是如何理解建筑的,你已经把前端和后端分开了。前端没有安全漏洞,但希望保护后端服务(如果存在一些html、css、js文件)

如果你能用可以理解的方式来做这件事,请解释为什么你需要这个方法?

Tomcat是一个Servlet容器,这意味着这里的所有东西都是普通Java。这就是为什么您可以轻松地保护任何您喜欢的URL。或者您可以构造基于自定义角色或基于权限的安全系统。此外,在Filter的帮助下,您可以过滤App特定应用程序(WAR)中的任何url请求文件。

下面是一个简单的例子:

代码语言:javascript
复制
@WebFilter("/secured/*")
public class LoginFilter implements Filter {

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println(" loginFilter servlet begin ");
          HttpServletResponse httpResponse = (HttpServletResponse) response;
          HttpServletRequest httpRequest = (HttpServletRequest) request;
          String URI = ((HttpServletRequest)request).getRequestURI();
          HttpSession session =httpRequest.getSession(false);
          String emailFromWeb = null;
          String loginURL = httpRequest.getContextPath() + "/login.html";
          String rootURL = httpRequest.getContextPath() + "/secured/root.html";
          String userURL = httpRequest.getContextPath() + "/secured/user.html";
          String logoutURL=httpRequest.getContextPath() + "/logout";

          if(session==null){
              System.out.println("false inquery session is null");
              httpResponse.sendRedirect(loginURL);
              return;

          }
          emailFromWeb  = session.getAttribute("email").toString();     

          System.out.println(" email from Session "+emailFromWeb);


              if  (httpRequest.getRequestURI().equals(loginURL)){
                  System.out.println("login page inquery");
                  chain.doFilter(request, response);
                  return;
              } 
              if(httpRequest.getRequestURI().matches(".*(css|jpg|png|gif|js)")){
                    System.out.println(" inquery by "+httpRequest.getRequestURI());
                    chain.doFilter(request, response);
                    return;
                }

              if (httpRequest.getRequestURI().equals(rootURL)&&Authentication.isPermitted(emailFromWeb, "RootPage")) {
                  System.out.println("root page inquery");
                  chain.doFilter(request, response);
                  return;
              } 

              else if(httpRequest.getRequestURI().equals(userURL)&&Authentication.isPermitted(emailFromWeb, "UserPage")){
                  System.out.println("user page inquery");
                  chain.doFilter(request, response);
                  return;
              }
              else if(httpRequest.getRequestURI().equals(logoutURL)){
                  System.out.println("logout inquery");
                  httpResponse.sendRedirect(loginURL);
                  return;
              }
              else {
                  System.out.println("false inquery");
                  httpResponse.sendRedirect(loginURL);
                  return;
              }



    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17803613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档