我已经成功地将spring security 3.0集成到web应用程序中,并且运行良好,现在我要将spring security 3.0升级到3.1,我的CustomAuthenticationManager遇到问题,每当我尝试登录时,CustomAuthenticationManager都会被呼叫两次。所以,在第一次用户身份验证成功并返回usernamePasswordAuthenticationToken,但这个类再次被调用,这次主体返回正确的值,但凭据返回null,因此用户身份验证失败,并再次重定向到登录页面,这就是为什么我永远无法登录。
CustomAuthenticationManager:
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private ILoginService loginService;
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
UsernamePasswordAuthenticationToken usernamePassswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
authentication.getPrincipal(), authentication.getCredentials());
if (loginService.authenticateUser((String) authentication.getPrincipal())) {
if (loginService.validateUserIdAndPass((String) authentication.getPrincipal(), (String) authentication.getCredentials())) {
usernamePassswordAuthenticationToken.setAuthenticated(false);
} else
throw new BadCredentialsException(
"Username/Password does not match");
} else
throw new BadCredentialsException(
"Username/Password does not match");
return usernamePassswordAuthenticationToken;
}
public boolean supports(Class<? extends Object> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
我的应用程序ContextSecurity。xml:
<global-method-security pre-post-annotations="enabled">
</global-method-security>
<beans:bean id="myAccessDecisionManager"
class="com.app.common.security.repository.MyAccessDecisionManager">
</beans:bean>
<http auto-config="true" once-per-request="true"
access-decision-manager-ref="myAccessDecisionManager" access-denied-page="/jsp/errorPage.jsp">
<intercept-url pattern="/*.app" access="ROLE_ANONYMOUS"/>
<form-login login-page="/login.app" login-processing-url="/j_spring_security_check"
default-target-url="/login/validate.app"
authentication-failure-url="/login.app?login_error=1" />
<logout logout-url="/j_spring_security_logout"
logout-success-url="/login.app" invalidate-session="true" />
<session-management invalid-session-url="/login.app"
session-fixation-protection="newSession">
<concurrency-control max-sessions="100"
error-if-maximum-exceeded="false" />
</session-management>
</http>
<authentication-manager>
<authentication-provider ref="customAuthenticationProvider"></authentication-provider>
</authentication-manager>
<beans:bean id="customAuthenticationProvider"
class="com.app.common.security.repository.CustomAuthenticationProvider">
</beans:bean>
请告诉我哪里错了。
自Spring 3.0.3(及更高版本)以来,默认的AuthenticationManager
ProviderManager会在尝试验证后清除凭据(第1493节)。您必须是旧版本(Spring Security的3.0.3之前)的用户。
您的CustomAuthenticationProvider
也有缺陷,因为在成功的身份验证之后,您应该将authenticated设置为true
(否则扩展AbstractSecurityInterceptor
的拦截器将重新尝试身份验证)。
链接
我正在运行《docker compose》中的jenkins,来自图片jenkins/jenkins。升级到Jenkins 2.277.1后,LDAP身份验证停止工作,我无法登录。我收到以下错误: 詹金斯。docker。new\u 1 | 2021 06-04 14:49:31.3110000[id=138]警告o.j.p.p.DiskUsageCollector#collect:无法获取磁盘使用
与pip一起运行命令会出现以下错误。甚至命令也会产生以下错误。 我读到这个错误是由setupols版本31.0.0引起的,它应该低于28.0.0。但是我的setupols的版本是26.1.1,它仍然给出了相同的错误。
在我有时工作正常,但是当我升级它时,它停止了工作。 我安装的版本是,带有和。 Traceback(最近一次调用最后一次):文件"C:\用户\动画\AppData\本地\程序\Python\Python36\lib\site-包\tenorflow\python\pywrap_tensorflow.py",第58行,来自tensorflow.python.pywrap_tensorflow_inte
我刚从以下位置升级了Gradle版本: 到 我的项目中的数据绑定已停止工作。我曾尝试重建项目,甚至尝试从项目中完全删除文件夹,但没有成功。Android Studio出现以下错误: 类型参数T的上限不兼容:ViewDataBinding和ActivityMainBinding 请看这个截图。 如果我降级到,一切正常。如何获取此错误的信息?
我应该将我的项目log4j升级到log4j2。所以我删除了log4j依赖项并添加了log4j2。一些项目工作良好,但有一个项目出现错误,如下所示: 我使用了mvn dependency:tree命令,试图找到依赖项之间的冲突,并且试图排除可能相关的每个子库,但仍然得到相同的错误。 依赖项: log4j2.properties:
问题内容: 我正在尝试将Eclipse环境更新为Java8。我安装了jdk和jre版本8。我也这样做: https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler 然后在项目中->属性-> Java构建路径-> JRE系统库->编辑->执行环境-> JavaSE-1.8(unbound),这是名称中唯一带有Java 8的选项。但是,