Spring安全登录失败
我将SpringSecurity3.0.6与JSFMojarra2.1.18和PrimeFaces3.5一起使用 我创建了一个LoginManagedBean,它注入了SpringSecurity的AuthenticationManagerSpring安全登录失败,spring,security,jsf,login,Spring,Security,Jsf,Login,我将SpringSecurity3.0.6与JSFMojarra2.1.18和PrimeFaces3.5一起使用 我创建了一个LoginManagedBean,它注入了SpringSecurity的AuthenticationManager @ManagedBean @SessionScoped public class LoginManagedBean implements Serializable { private static final long s
@ManagedBean
@SessionScoped
public class LoginManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
private static transient final Log logger = LogFactory.getLog(LoginManagedBean.class);
private LoginDTO login;
private String username;
private String password;
@ManagedProperty(value = "#{authenticationManager}")
private transient AuthenticationManager authenticationManager = null;
...
它起作用了。但如果登录失败,我将无法使用正确的值再次登录。我想我需要清除/重置authenticationManager对象,但我不知道如何清除/重置。有什么建议吗?提前谢谢 你应该换一种方式 1) 定义身份验证管理器
<s:authentication-manager>
<s:authentication-provider>
<s:user-service>
<s:user name="root" password="root"/>
</s:user-service>
</s:authentication-provider>
</s:authentication-manager>
这是SpringSecurity3.0.6中的一个bug。由于某种原因,在BadCredentialsException之后密码被删除(请参阅AuthenticationException.java:58)。登录失败后,提供的密码始终为空,这是失败的。我切换到3.0.8,这就解决了问题。我还尝试切换到3.1.3,但这似乎是一项主要任务。但为什么您直接使用authenticationManager而不是内置解决方案?我想用JSF的方式来实现这一点,我觉得插入authenticationManager而不是将一些字段发布到URL更容易。顺便说一句,我没有测试它,但是3.0.6的问题仍然是一样的。Regardi尝试了你建议的方式,就像我想象的那样,我的行为与注入式authenticationManager相同。至少我的项目是这样的。使用会话范围的托管bean而不是内置解决方案的另一点是:我的应用程序中的所有托管bean都从登录托管bean获取用户信息(例如用户名、角色)…如果您使用的是我的代码,则可以从SecurityContextHolder.getContext().getAuthentication()获取用户信息
<s:http auto-config="true" use-expressions="true">
<s:intercept-url pattern="/favicon.ico" access="permitAll"/>
<s:intercept-url pattern="/resources/**" access="permitAll"/>
<s:intercept-url pattern="/login**" access="isAnonymous"/>
<s:intercept-url pattern="/pages/*" access="hasAuthority('ROLE_USER')"/>
<s:form-login login-page="/login.xhtml" default-target-url="/"
authentication-failure-url="/login.xhtml?loginFailed=true"/>
</s:http>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>