我找到了很多例子,但问题是他们都使用JSP/JSF
作为视图。问题是他们总是使用j_username
作为用户名输入ID,使用j_password
作为密码ID。我发现这些名称是标准名称。 Primefaces不允许我给p:inputtext
组件命名。你有任何解决方案吗?
以下是一个示例:http://krams915.blogspot.com/2012/01/spring-security-31-implement_13.html
答案 0 :(得分: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。对于另一个版本,配置可能就像上面那样。
答案 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"
:
ExternalContext context = FacesContext.getCurrentInstance()
.getExternalContext();
RequestDispatcher dispatcher = ((ServletRequest) context.getRequest()).getRequestDispatcher("/j_spring_security_check");
dispatcher.forward((ServletRequest) context.getRequest(),
(ServletResponse) context.getResponse());