我有问题。在我的应用程序中,我有一个用于身份验证的现有对象(在我的自定义身份验证提供程序类中)。此对象很重要,因为它包含有关连接的信息。验证后,此对象存在。现在我想将此对象传递给JSP页面。我不知道该怎么做。
我尝试为这个类编写doGet()
方法,make request.setAttribute("object", object)
并在JSP上通过request.getAttribute("object")
获取此对象,但它不起作用。我也尝试使用<jsp:useBean>
,但它仍然不起作用。我没有任何其他解决方案。
答案 0 :(得分:0)
好的,所以我在自定义身份验证提供程序中有一个retrieveUser方法,我连接到ldap服务器(ldapConnect类):
@Override
protected UserDetails retrieveUser(String username,
UsernamePasswordAuthenticationToken authentication)
throws AuthenticationException {
log.entry("retrieveUser", authentication.getPrincipal());
LdapUser userDetail = null;
UsernamePasswordAuthenticationToken userToken = authentication;
String userName = userToken.getName();
userName = userName != null ? userName.toLowerCase() : userName;
String password = userToken.getCredentials().toString();
if (password == null || "".equals(password)) {
log.debug("retrieveUser", "no password provided");
throw new AuthenticationCredentialsNotFoundException(
"Invalid login or password");
}
// try to connect with ldap and check retrieved username and
// password
LdapConnect ldapConnect = new LdapConnect();
connect = ldapConnect.connection(userName, password);
if (connect) {
log.debug("retrieve user", "correct connection with ldap");
userDetail = new LdapUser();
setUserDetails(userDetail, ldapConnect.getCtx(), username);
userDetail.setLdapConnect(ldapConnect);
}
if (userDetail == null) {
throw new UsernameNotFoundException("User not found");
}
return userDetail;
}
之后我想访问现有的LdapConnect类(完全是这个类中的一个属性),我从HttpServlet类扩展了我的LdapConnect类,并实现了doGet方法:
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("ctx", ctx);
getServletContext().getRequestDispatcher("/ldap_saved.jsp").forward(
request, response);
}
最后我尝试从我的jsp文件中获取LdapClass的ctx属性:
<%DirContext ctx = (DirContext) request.getAttribute("ctx");%>
<%=ctx.toString();%>
但是这样我就没有得到现有的ctx对象。