gpt4 book ai didi

java - 从 servlet 安全地将参数传递给 EJB?

转载 作者:行者123 更新时间:2023-12-04 05:08:36 25 4
gpt4 key购买 nike

将多个 HTTP 参数从 servlet 传递到 EJB 的安全、规范的方法是什么? 该应用程序是一个基于 Web 的 SMTP 客户端,它采用以下参数:

  • 来自
  • 密件抄送
  • 抄送
  • 主题
  • 正文

  • 为了使模型 ( EJB ) 与 View ( JSP ) 和 Controller ( servlet ) 分开, 我想避免传递 HttpServletRequest 直接到 EJB .
  • 我应该使用 Session变量?
  • 我应该传递6个参数吗?要传递 6 个参数,我必须在控制层中执行业务逻辑。

  • 代码:
     public String send_message(HttpServletRequest request) {
    try {
    Properties properties = System.getProperties();
    properties.put("mail.smtp.host", SMTP_HOST);
    Session session = Session.getInstance(properties, null);

    String from = request.getParameter("from");
    String to = request.getParameter("to");
    String cc = request.getParameter("cc");
    String bcc = request.getParameter("bcc");
    String subject = request.getParameter("subject");
    String body = request.getParameter("body");

    MimeMessage message = new MimeMessage(session);
    Address sender = new InternetAddress(from);
    message.setFrom(sender);

    Address[] toAddresses = InternetAddress.parse(to);
    message.setRecipients(Message.RecipientType.TO, toAddresses);

    Address[] ccAddresses = InternetAddress.parse(cc);
    message.setRecipients(Message.RecipientType.CC, ccAddresses);

    Address[] bccAddresses = InternetAddress.parse(bcc);
    message.setRecipients(Message.RecipientType.BCC, bccAddresses);

    message.setSubject(subject);
    message.setText(body);

    Transport.send(message);
    return "Your message was sent successfully!";
    } catch (AddressException AE){
    return "Oops! There was an error parsing the addresses!";
    } catch (SendFailedException SFE){
    return "Oops! There was an error sending the message!";
    } catch (MessagingException ME){
    return "Oops! There was an error sending the message!";
    }
    }

    有什么建议吗?

    最佳答案

    I'd like to refrain from passing an HttpServletRequest directly to the EJB.



    很好。 HttpServletRequest 属于 web 层,永远不应该传递给业务层。

    Should I use a Session variable?



    出于同样的原因,这不是一个好主意。 Session 也属于 servlet 层。此外,在设计良好的应用程序中,它可能根本不可能; Web 组件依赖于 EJB 组件,而不是相反。在 EJB 中使用 session 意味着颠倒这种关系。

    Should I pass 6 parameters? To pass the 6 parameters, I'd have to perform business logic in the control-tier.



    六个参数非常接近“很多”,如果还没有的话。就我个人而言,我认为这种情况值得引入一个包含这些值的新参数对象(又名值对象,又名传输对象)。尤其是当你编写新代码时,设计一个有 6 个参数定义相同概念的方法是一种罪过——邮件。多参数方法难以阅读并且容易产生“破窗效应”——鼓励在需要扩展时添加另一个参数。

    To pass the 6 parameters, I'd have to perform business logic in the control-tier.



    将其视为使一种表示适应另一种表示 - 这不是业务逻辑。 BL 是直接受您的要求影响的东西,您在这里所做的只是架构。

    关于java - 从 servlet 安全地将参数传递给 EJB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182844/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com