我正在尝试从远程网页到我们的门户进行远程日志记录。 来自远程网页的用户具有登录/密码字段,他将提交这些字段以在我们的门户中处理身份验证。如果一切正常,他将被记录。如果失败,他将被重定向到门户网站的标准登录页面,并带有匹配的验证错误(即“无效登录/密码”)。
我试图通过servlet来做,希望表单的安全字段将通过请求传输,直到它们到达门户的登录页面。
不幸的是,他们看起来没有达到它,因为我总是收到“无效的密码/登录”错误。
由于我对Spring真的没有经验,我真的不确定如何实现它。我可以考虑通过BASE 64编码数据传递信息,但我不知道如何将这些信息传递给Spring,也不确定这是一种安全的方法。
所以,如果你们有任何想法,我会高兴地读到它!
以下是远程表单代码:
<form id="connexion">
<input id="j_username" name="j_username" type="text" value="Email" class="field"/>
<input id="j_password" name="j_password" type="password" value="Mot de passe" class="field"/>
<input type="button" class="btn" value="OK" onClick="javascript:register()"/>
</form>
function register(){
urlSite=http://localhost:8080/monApp/DistantLogingServlet
this.document.location=urlSite
}
servlet部分:
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
protected final void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
final ExternalContext context = FacesUtils.getFacesContext( request, response, servletContext).getExternalContext();
final RequestDispatcher dispatcher = request.getRequestDispatcher("/j_spring_security_check");
dispatcher.forward(request, (ServletResponse) context.getResponse());
FacesContext.getCurrentInstance().responseComplete();
}
门户网站的标准登录页面(jsp):
<h:inputSecret
id="j_password"
type="text"
name="j_password"
value="#{user.password}"/>
<h:selectBooleanCheckbox
id="_spring_security_remember_me"
name="_spring_security_remember_me"
value="#{user.rememberme}"
class="float-left" />
<h:commandButton
action="#{user.doLogin}"/>
和java身份验证部分:
public final String doLogin() throws IOException, ServletException {
final ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
final HttpServletRequest request = ((HttpServletRequest) context.getRequest());
final RequestDispatcher dispatcher = request.getRequestDispatcher("/j_spring_security_check");
dispatcher.forward(request, (ServletResponse) context.getResponse());
FacesContext.getCurrentInstance().responseComplete();
// It's OK to return null here because Faces is just going to exit.
return null;
}
提前感谢您的关注!
答案 0 :(得分:1)
这看起来像是单点登录方案。
所以
如果用户已登录您信任的应用程序,则您的门户网站上不需要登录表单。
执行此操作的一些标准方法是CAS或Open ID,Spring Security支持这两种方法。
第三种方法是在用户成功登录远程站点并使用弹簧过滤器查找该cookie时,在用户的浏览器上设置cookie。通常用于此的过滤器是AbstractPreAuthenticatedProcessingFilter
(实际上是它的子类)。
我还会指出Spring Security文档的Pre-Authentication scenarios部分。