如何在Primefaces中使用Spring安全性

时间:2013-06-10 07:34:49

标签: spring primefaces spring-security

我找到了很多例子,但问题是他们都使用JSP/JSF作为视图。问题是他们总是使用j_username作为用户名输入ID,使用j_password作为密码ID。我发现这些名称是标准名称。 Primefaces不允许我给p:inputtext组件命名。你有任何解决方案吗?

以下是一个示例:http://krams915.blogspot.com/2012/01/spring-security-31-implement_13.html

3 个答案:

答案 0 :(得分:2)

j_usernamej_password只是Spring Security中的默认值。您可以按预期自定义这些名称。为此,您可以设置password-parameterusername-parameter的值,如下所示:

<security:form-login login-page="/login.html" 
    default-target-url="/welcome.html"
    always-use-default-target="true" 
    authentication-failure-url="/login.html?error" 
    password-parameter="your_value" 
    username-parameter="your_value"/>

我正在使用Spring Security 3.1。对于另一个版本,配置可能就像上面那样。

答案 1 :(得分:0)

尝试使用指向登录控制器URL而不是Primefaces标记的普通HTML表单:

<form name='f' action="/j_spring_security_check" method='POST'>
    <input type='text' name='j_username' value=''>
    <input type='password' name='j_password' />
    <input name="submit" type="submit" value="submit" />
</form> 

答案 2 :(得分:0)

您可以直接发布到j_spring_security_check,但有时可能会以编程方式将两个世界结合起来。

<p:commandButton value="Login" action="#{loginController.login}" ajax="false">
<h:inputText id="j_username" required="true" />
<h:inputSecret id="j_password" required="true" />

h xmlns:h="http://java.sun.com/jsf/html"

在您的loginController中

ExternalContext context = FacesContext.getCurrentInstance()
                    .getExternalContext();

RequestDispatcher dispatcher = ((ServletRequest) context.getRequest()).getRequestDispatcher("/j_spring_security_check");

dispatcher.forward((ServletRequest) context.getRequest(),
                (ServletResponse) context.getResponse());