1

我发现了很多例子,但问题是它们都JSP/JSF用作视图。问题是它们总是用作用j_username户名输入 ID 和j_password密码 ID。我发现这些名称是标准名称。Primefaces 不允许我为p:inputtext组件命名。你有什么解决办法吗?

这是一个例子: http: //krams915.blogspot.com/2012/01/spring-security-31-implement_13.html

4

3 回答 3

2

j_username并且j_password只是 Spring Security 中的默认值。您可以按预期自定义这些名称。为此,您设置password-parameter和的值username-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。对于另一个版本,配置可能类似于上面。

于 2013-06-10T12:05:33.753 回答
0

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

<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> 
于 2013-06-10T09:50:22.737 回答
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" />

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

在您的登录控制器中:

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

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

dispatcher.forward((ServletRequest) context.getRequest(),
                (ServletResponse) context.getResponse());
于 2013-06-10T14:39:00.283 回答