我正在尝试在Spring Security中成功/失败登录/注销后记录消息。
另外,我使用的是Spring Boot,因此配置代码很少。
我正在使用的表单是自动生成的。
$(button).on('click', function(event) {
event.preventDefault();
var grid = $('.grid-class');
$('body, html').animate({
scrollTop: grid.offset().top
}, 400);
});
WebSecurityConfig.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin();
}
@Configuration
protected static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userSearchFilter("(uid={0})")
.contextSource()
.url("ldap://...:389/ou=...,dc=...,dc=...")
.managerDn("cn=...,dc=...,dc=...")
.managerPassword("...");
}
}
}
logback.xml
我的登录成功代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
</configuration>
LoginSuccessService.java
它不会起作用。我在日志中什么都没得到。
我需要编写哪些附加代码,如果有的话?我需要在任何地方初始化此侦听器吗?
我也使用this link作为参考,但我认为我不需要写一个发布者,因为我没有为该活动编写自己的类。
我也尝试使用import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.security.authentication.event.*;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Component
public class LoginSuccessService implements ApplicationListener<InteractiveAuthenticationSuccessEvent>{
private static final Logger logger = LoggerFactory.getLogger(LoginSuccessService.class);
@Override
public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event) {
logger.debug("You have been logged in successfully.");
Date loginDate = new Date();
logger.debug("Login Time: " + loginDate.toString());
}
}
代替AuthenticationSuccessEvent
,但同样的事情。
如果有帮助,登录失败会产生以下输出(预期输出应包括&#34;无法登录&#34;以及当前日期,这是InteractiveAuthenticationSuccessEvent
中debug = TRUE的日志) :
application.properties
答案 0 :(得分:1)
错误结果与配置有关。
为了捕获登录事件,我使用了对象
InteractiveAuthenticationSuccessEvent
或
AuthenticationSuccessEvent
(注销还没有实现的监听器,你可能会对HttpSessionEvent
感到满意)。
此外,查看记录器是否配置为记录您的包也很重要;默认情况下,应用程序未配置为记录应用程序消息。这就是为什么我没有得到任何输出。
所以,有两件事:
com.mycompany
,则应在application.properties
或application.yml
文件中添加一行(通常位于<PROJ_DIR>/src/main/resources/
;若否,请创建您自己的名称)用于记录: application.properties
:
logging.level.com.mycompany=DEBUG/INFO/WARN/ERROR
#debug is lowest, error is highest
或:
application.yml
:
logging:
level:
com:
mycompany: DEBUG/INFO/WARN/ERROR
debug()
方法记录它,否则它可能不会显示(我使用info()
而我什么都没有。)