我正在使用JSF2.我已经实现了一个自定义面部servlet,如下所示:
public class MyFacesServletWrapper extends MyFacesServlet {
// ...
}
Run Code Online (Sandbox Code Playgroud)
其中我正在进行一些授权检查并在用户未登录时发送重定向:
public void service(ServletRequest request, ServletResponse response) {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (...) {
String loginURL = req.getContextPath() + "/LoginPage.faces";
res.sendRedirect(loginURL);
}
}
Run Code Online (Sandbox Code Playgroud)
这在用户尝试导航到另一个页面时有效.但是,当JSF命令链接/按钮提交JSF表单时,这不起作用.该行sendRedirect()线被击中并执行,没有异常被抛出了,但用户停留在同一页面.基本上,根本没有视觉变化.
为什么这适用于页面导航,而不是表单提交?
我正在做一个记录用户操作的审计系统.我需要记录用户执行登录的时间.我搜索了不同的地方,但我总是遇到同样的解决方案,使用"过滤器".
以上解决方案对我不起作用.没有其他解决方案使用过滤器或进行自定义登录?
我正在使用带有GlassFish 3的Java 7
我已经测试了Glassfish 3.0.1中的默认安全容器,并得出结论,我将不再花费更多时间.相反,我想自己控制验证.但我需要一些指导才能让我走上正轨.
目前我有一个具有登录/注销功能的UserBean(见下文).我不想使用*j_security_check*内置容器,但使用核心JSF 2.0.
我的问题是;
感谢任何帮助或链接到一个例子,问候克里斯.
PS.请原谅我将两个问题集中在一起
@ManagedBean
@SessionScoped
public class UserBean {
private AuthenticateUser authenticateUser;
...
public String login() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
JsfUtil.log("Username : " +authenticateUser.getUserName());
JsfUtil.log("Password : " +authenticateUser.getPassword());
AuthenticateUser authRequest = authenticationFacade.find(authenticateUser);
try {
if(!authRequest.equals(authenticateUser))
return "/loginError";
request.login(authenticateUser.getUserName(), authenticateUser.getPassword());
return "";
} catch(ServletException e){
JsfUtil.addErrorMessage(e, "Incorrect username or password, please try again.");
return "/loginError";
}
...
public String logOut() {
String result = "/index?faces-redirect=true";
FacesContext context = FacesContext.getCurrentInstance(); …Run Code Online (Sandbox Code Playgroud) 是否可以在 JAAS 重定向之前检索用户请求的 URL?
我的 web.xml 是这样的:
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/login.jsf</form-error-page>
</form-login-config>
</login-config>
Run Code Online (Sandbox Code Playgroud)
所以,当我没有登录并尝试去前。www.blah.com/myApp/users.jsf
然后应用程序将我重定向到login.jsf,但 URL 仍然与用户请求的相同。
然后我填写登录表单并单击登录,这将转到我的 backbean,在那里调用我的 loginModule 和 callbackHandler 例如:
public String actionLogin(){
//do my login and stuff
return "page that user requested";
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法来获取用户请求的页面。 request.getRequestURL()
都还给我: www.blah.com/myApp/login.jsf
有什么办法可以得到请求的页面? www.blah.com/myApp/users.jsf
问候
我有一个Web应用程序,我希望主页包含一个登录表单,以及其他数据.如果用户选择登录,则应将其重定向到另一个页面(例如login_success.jsp).我的问题是:我可以使用j_security_check机制登录,或者唯一的方法是使用托管bean来处理登录?
我的主页看起来像这样:
....
<form action="j_security_check" method="POST" name="loginForm">
<h:panelGrid columns="2">
<h:outputLabel id="userNameLabel" for="j_username" value="#{label.home_username}:" />
<h:inputText id="j_username" autocomplete="off" />
<h:outputLabel id="passwordLabel" for="j_password" value="#{label.home_password}:" />
<h:inputSecret id="j_password" autocomplete="off" />
<h:panelGroup>
<h:commandButton type="submit" value="Login" />
<h:commandButton type="reset" value="Clear" />
</h:panelGroup>
</h:panelGrid>
</form>
...
Run Code Online (Sandbox Code Playgroud)
如果我按下登录按钮,我得到 - > HTTP状态400 - 对表单登录页面的无效直接引用.很明显,j_security_check机制不知道在哪里"重定向",因为我以前没有请求过受保护的资源.
我搜索了如何在我的JSF Web项目中进行用户身份验证的最佳方法.我在库存过流中找到了BalusC的这个非常好的例子(顺便说一下,谢谢你BalusC).但我不明白这个系统.
我写了一个注册页面.注册后,用户进入我的数据库.但是谁可以使用j_security_check从我的数据库中检查用户?
在我的webproject中,我没有用户和非用户的站点.当用户进入时,他会看到更多选项,例如他可以发布文本.我可以检查一下吗?我可以在登录时使用userdata保存用户类并检查:
if(user != null){
<h:inputText value="User Only Text" id="text" />
}
Run Code Online (Sandbox Code Playgroud)
但我认为这种方式并不是很优雅.另外我的问题是,让用户登录并在网页上显示有效用户的更多选项的最佳方式是什么,而不是非用户.
谢谢,抱歉我的英语不好.
如何实现j_security_check与Primefaces?通常在JSP中如果要使用JAAS进行登录,则登录表单通常为:
<form action="j_security_check" method="POST">
Username:<input type="text" name="j_username"><br>
Password:<input type="password" name="j_password">
<input type="submit" value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)
但是我们如何在JSF或Primefaces中实现它!
formId:componentIdp:commandButton,默认情况下,它在Primefaces中被ajaxified,因此它如何以非ajax方式提交表单我需要使用Primefaces实现JAAS表单身份验证,我在这里分享解决方案; 这对某人来说可能会派上用场.
什么是使用存储在数据库中的随机盐渍密码的WildFly(8.2)方法?
是的实现org.jboss.crypto.digest.DigestCallback意味着有机会获得部分盐从数据库(在密码验证过程)?
或者我应该简单地将密码哈希并加密密码,然后再将其交给login方法HttpServletRequest?