Я хочу позвонить удаленному EJB с другого сервера EJB. У меня есть Remote EJB, развернутый на OpenEJB, тогда я назову их из Glassfish HTTPServlet
. Я знаю, что на локальном EJB я могу сделать аннотацию @EJB, но я хочу, чтобы пользователь «аутентифицировал» удаленный сервер OpenEJB из сервлета Glassfish.Удаленный EJB от HttpServlet
на OpenEJB:
//OpenEJB server at 192.168.10.12
public class AdminManager {
@RolesAllowed("admin")
public void test() {
System.out.println("Admin called this method");
}
}
Glassfish Servlet
//Glassfish servlet at 192.168.10.10
public class AdminManage extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "ejbd://192.168.10.12:4201");
// user and pass optional
String userName = req.getSession().getAttribute("username");
String password = req.getSession().getAttribute("password");
p.put("java.naming.security.principal", userName);
p.put("java.naming.security.credentials", "password);
final InitialContext ctx = new InitialContext(p);
final AdminManagerRemote myBean = (MyBean) ctx.lookup("AdminManagerRemote");
try {
myBean.test();
} catch(Exception epx) {
resp.sendRedirect(resp.encodeRedirectURL("/login"));
}
}
}
Хорошо это кажется решением, но это не "хорошо" решение для меня. Каждый раз, когда аутентифицируется на openejb отстой, вот так;
String userName = req.getSession().getAttribute("username");
String password = req.getSession().getAttribute("password");
p.put("java.naming.security.principal", userName);
p.put("java.naming.security.credentials", "password);
И код не является чистым. Я хочу, чтобы пользователь аутентифицировался только один раз и вызывал ejb-методы. Есть ли лучшее решение, то это?
Могу ли я объединить HTTP-аутентификацию Glassfish с удаленной аутентификацией OpenEJB? Я имею в виду, когда пользователь аутентифицируется на HTTP-сервере Glassfish, я также хочу, чтобы openEJB аутентифицировался. Это действительно заставляет меня сходить с ума. какое решение хорошо спасать от кодов спагетти?