我有一個EJB來處理創建需要訪問託管bean(帳戶範圍)的客戶用戶帳戶,該託管bean用於管理用戶帳戶的用戶驗證密鑰(密鑰是暫時的,因此他們不需要通過數據庫調用來處理)。但是,我無法找到將驗證密鑰發送到EJB(生成發送給用戶的驗證電子郵件)的方法。從EJB訪問ManagedBean方法
AccountVerifierBean.java
@ManagedBean(name = "accountVerifierBean", eager = true)
@ApplicationScoped
public class AccountVerifierBean implements Serializable {
private HashMap<String, String> verificationKeyMapping;
public AccountVerifierBean() {}
public boolean verifyKey(String username, String key) {
return key.equals(verificationKeyMapping.get(username));
}
public String generateKey(String username) {
Date time = new Date();
String key = username + time.toString();
key = Encryption.hashSHA(key);
verificationKeyMapping.put(username, key);
return key;
}
}
CustomerService.java
@Named
@Stateless
@LocalBean
public class CustomerService {
@PersistenceContext(unitName = "MovieProject-ejbPU")
private EntityManager em;
private String username;
private String password;
//getters and setters
public void validateEmail() {
Properties serverConfig = new Properties();
serverConfig.put("mail.smtp.host", "localhost");
serverConfig.put("mail.smtp.auth", "true");
serverConfig.put("mail.smtp.port", "25");
try {
Session session = Session.getInstance(serverConfig, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("<ACCOUNT>","<PASSWORD>");
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]","VideoPile"));
message.addRecipient(
Message.RecipientType.TO, new InternetAddress(username)
);
message.setSubject("Welcome to VideoPile!");
message.setContent("<p>Welcome to VideoPile, Please verify your email.</p><p>" + verifierKey + "</p>", "text/html; charset=utf-8"); //verifierKey is what I'm trying to get from AccountVerifierBean.
Transport.send(message);
}
catch (MessagingException ex){
Logger.getLogger(CustomerService.class.getName()).log(Level.SEVERE, null, ex);
}
catch (Exception e) {
Logger.getLogger(CustomerService.class.getName()).log(Level.SEVERE, null, e);
}
}
public String encrypt(String password) {
try {
return new String(Base64.encode(MessageDigest.getInstance("SHA").digest(password.getBytes())));
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(CustomerService.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
}
我試過@注入,@ManagedProperty,使用應用程序的地圖,並使用ELContext。似乎沒有任何工作。
編輯: 我認爲有問題的豆。從bean調用的任何方法似乎都沒有做任何事情(EL被解析,儘管沒有bean方法調用)。
我測試過的註解,它使用(均爲javax.faces.bean。*)
爲什麼不修改EJB中的方法來接收參數? – 2013-04-27 00:34:51
請參閱編輯。 Verifier bean似乎有問題,而不是EJB。 – 2013-04-27 00:41:08