我正在使用spring boot开发一个小应用程序。我的问题是,我需要显示用户的名字时,一个用户的身份验证正确。每次身份验证(每次登录输入用户名和密码)都会正确显示名字。但是如果我们关闭浏览器并在会话超时之前重新打开它,而没有输入用户名和密码,则不会显示First name。
身份验证时我的口供
@Component
public class SecurityHandler implements AuthenticationSuccessHandler{
@Autowired
private UserService userService;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
HttpSession session = request.getSession();
String userName = null;
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
userName = ((UserDetails) principal).getUsername();
} else {
userName = principal.toString();
}
User user = userService.findBySSO(userName);
session.setAttribute("userName", user.getFirstName());
response.sendRedirect(request.getContextPath()+"/dashboard/index");
}
}
安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
//Autowired
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers() // antmachers
.and().formLogin().loginPage("/login").successHandler(securityHandler).loginProcessingUrl("/login").usernameParameter("ssoId").passwordParameter("password")
.and().rememberMe().rememberMeParameter("remember-me").tokenRepository(tokenRepository)
.tokenValiditySeconds(86400).and().csrf().and().exceptionHandling().accessDeniedPage("/Access_Denied")
.and()
.sessionManagement().invalidSessionUrl("/login").maximumSessions(1).expiredUrl("/login").and().sessionAuthenticationErrorUrl("/login").sessionFixation().migrateSession()
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS);
http.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.invalidateHttpSession(true)
.permitAll();
}
}
会话列表
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setMaxInactiveInterval(-1);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
}
}
我参考了Java:为什么当tab或浏览器关闭时http会话不被破坏?,正如他们所说的我试图使用JavaScript通过onunload事件调用注销,但它不起作用。很少有教程说它的工作取决于浏览器的设置。
最后,无论如何,我需要显示用户的名字,如果他使用任何方法进入站点。
您应该将访问包含用户名的网页的权限限制为仅允许授权用户访问,关闭浏览器后,您的用户将注销,因为您看不到他们的名字。
您错误地理解了该问题,因此无法获得进行研究的正确方法。希望这有帮助
我相信你的会话监听器应该是一个豆子
你能试试这个吗:
@WebListener
public class SessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session created");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session Destroyed");
}
}
问题内容: 我有以下HttpSessionlistener的实现 } 基本上,我记录会话的创建和销毁时间。但是,如果会话很长(默认为30分钟),并且用户同时关闭浏览器,则 不叫? 这是为什么 ?是否存在一种解决方法来准确记录会话被销毁的时间(用户关闭浏览器时)?这不应该是浏览器的问题,在关闭会话时终止会话吗? 我必须实现任何接口才能正常工作吗? 谢谢 ! 问题答案: 当关闭浏览器或关闭选项卡时,服
我想捕获浏览器窗口/选项卡关闭事件。我尝试了以下方法,但不起作用: 尝试了这些链接,但没有更多的成功。 JavaScript检查浏览器窗口何时关闭 如何捕获浏览器窗口关闭事件? javascript检测浏览器关闭标签/关闭浏览器 尝试检测浏览器关闭事件 问题: 我只想检测浏览器关闭事件,并在不向用户显示提示的情况下对此进行一些处理。 我尝试过很多方法,通过jQuery或JavaScript检测浏览
问题内容: 尽管此问题有多个重复项,但我找不到适合我的解决方案。需要一些帮助。 我已在配置文件中使用过。 但这并没有帮助我破坏浏览器关闭时的会话。 应用电流: 1)如果用户有效,则在身份验证页面中,使用生成新的会话标识符 2)控制转到welcome.php,在这里我使用开始新的会话 3)在注销页面中的代码是 问题答案: 最好的方法是关闭会话:如果在特定时间间隔后该会话没有响应。然后关闭。
对于Oracle池连接,我使用,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误: ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序 另外,我在dao级别使用jdk7 try-with-resources语法进行连接: 弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中
问题内容: 我尝试了许多方法来通过jQuery或JavaScript检测浏览器关闭事件。但是,不幸的是,我无法检测到关闭。该和方法也没有工作。 如何检测的窗口,或事件? 问题答案: 您是否尝试过此代码? 第二个功能是可选的,以避免在单击和元素时提示。
问题内容: 嗨,我想知道如何在浏览器选项卡关闭时提示消息。我正在使用Reactjs。 这是我尝试添加到我的react组件中的内容。请指导我如何继续进行。 问题答案: 除了事件名称和警报将在该特定事件中阻止这一事实之外,您所做的都是正确的。 您可以显示如下消息: 希望这可以帮助。