用户成功登录系统后,系统会将用户重定向到主页.现在我的问题是,如果用户在没有登录系统的情况下点击查看帐户页面,系统会将用户重定向到登录页面.如果用户现在登录系统,系统会将用户重定向到主页,在这种情况下,任何方法都可以将用户重定向到上一页,即查看帐户页面而不是主页?
我尝试使用session
String url = (String)session.getAttribute("url");
if(url != null)
response.sendRedirect(url);
else
response.sendRedirect("homepage.faces");
Run Code Online (Sandbox Code Playgroud)
我将此代码置于public void doBtnAction(){}下,如果用户登录成功,则重定向到url.但我得到了这个错误
java.lang.IllegalStateException: Cannot forward after response has been committed
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
Run Code Online (Sandbox Code Playgroud) 我知道如何设置使用表单身份验证并使用消化密码(例如,SHA-256)的vanilla容器管理安全性.像这样的东西:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbc</realm-name>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/login-error.jsf</form-error-page>
</form-login-config>
</login-config>
Run Code Online (Sandbox Code Playgroud)
<form action="j_security_check">
<p><label>
Username:<br/>
<input type="text" name="j_username" />
</label></p>
<p><label>
Password:<br/>
<input type="password" name="j_password" />
</label></p>
<p>
<button type="submit">Submit</button>
</p>
</form>
Run Code Online (Sandbox Code Playgroud)
非常简单 - 但我真正希望能够做的是用全局盐和用户名加密密码.是的,我知道这并不理想,但现在,我只是在构建一个概念验证.
容器(GlassFish 3,在这种情况下)可以为我做这个,还是我必须编写自己的登录过滤器?我之前已经完成了(对于J2EE应用程序)但我的直觉告诉我,现在我必须采用更严格的方法来使用Java EE 6.