- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个使用 Spring Security 作为身份验证/授权提供程序的 Web 应用程序。这是我的配置方法:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
//Allow resources for all pages
.antMatchers("/css/**", "/images/**", "/webjars/**").permitAll()
//Allow or disallow specific routes depending on user privileges
//Users
.antMatchers("/users/", "users/search").hasAuthority("View Users")
.antMatchers("/users/add", "/users/edit/*", "/users/delete/*").hasAuthority("Edit Users")
.antMatchers("/roles/", "roles/search").hasAuthority("View Roles")
.antMatchers("/roles/add", "/roles/edit/*", "/roles/delete/*").hasAuthority("Edit Roles")
.antMatchers("/permissions/", "permissions/search").hasAuthority("View Permissions")
//A million other antMatchers here...
//All custom routes require authentication
.anyRequest().authenticated()
//Custom login page and handling
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/perform_login")
.successHandler(loginHandler())
.failureUrl("/login_error")
.permitAll()
//Custom logout handling with POST request and logout handler for auditing
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessHandler(logoutHandler())
.logoutSuccessUrl("/logout_success")
.permitAll()
//Invalidate the session and delete the JSESSIONID cookie on logout
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID");
}
我不想发布太多代码(如果需要的话我会发布),但本质上我的用户存储在数据库中,并且我使用 UserDetails 和 UserDetailsService 的扩展在 Spring Security 和数据库之间进行交互。在我的用户实体中,我有一个 boolean 字段,用于控制用户是否需要更改其密码(首次登录)。为了在用户登录时实现此功能,我有以下 AuthenticationSuccessHandler :
public class LoginHandler implements AuthenticationSuccessHandler
{
@Autowired
private UserService userService;
@Autowired
private PreferenceService preferenceService;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException
{
User user = userService.findById(((UserDetails) authentication.getPrincipal()).getId());
if (user.isMustChangePassword())
{
response.sendRedirect(request.getContextPath() + "/users/initialPasswordChange");
}
else
{
response.sendRedirect(request.getContextPath() + getAnchorPageURL(user));
}
}
}
登录时效果非常好,行为完全符合我的要求。初始密码更改页面没有菜单,但没有什么可以阻止用户修改 URL 并在不更改密码的情况下登陆主页。在以前的 Spring MVC 时代,我会构建一个在每个页面上运行的自定义 Filter 类,该类将检查登录的用户是否将该字段设置为 true 并重定向到初始密码更改页面。这样,无论用户做什么,在更改密码之前整个网站都将无法访问。
现在有没有更优雅的、Spring Security-ey 的方法来做到这一点?
如果有帮助的话,我将再次提供更多代码,不想淹没我的帖子,并希望首先包含最相关的部分。
最佳答案
这适用于旧的 Spring MVC Filter 方法。有没有更好的、纯粹的 Spring Security 方法来做到这一点?
@Component
@WebFilter(urlPatterns = {"/*"}, description = "initialPasswordChangeFilter")
public class InitialPasswordChangeFilter implements Filter
{
@Autowired
private UserService userService;
@Override
public void init(FilterConfig fc) throws ServletException
{
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
Filter.super.init(fc);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
try
{
SecurityContextImpl sci = (SecurityContextImpl) req.getSession(false).getAttribute("SPRING_SECURITY_CONTEXT");
User user = userService.findById(((UserDetails) sci.getAuthentication().getPrincipal()).getId());
String url = req.getRequestURL().toString();
if (user.isMustChangePassword() && !url.contains("initial") && !url.contains("/webjars") && !url.contains("/css") &&
!url.contains("/js") && !url.contains("/images"))
{
res.sendRedirect(req.getContextPath() + "/users/initialPasswordChange");
}
else
{
chain.doFilter(request, response);
}
}
catch (NullPointerException ex)
{
chain.doFilter(request, response);
}
}
}
关于java - Spring 安全: make every page redirect if the user doesn't meet a specific criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432445/
编程新手,但当我尝试创建此链接列表时,我收到错误消息“没有匹配的函数调用‘meetings::meetings()’”已经经历了几次,但我只是没有看到它是什么导致问题。 class meetings
为什么我运行此应用后在控制台中出现这些错误? 2019-11-17 19:49:21.997 INFO 10972 --- [nio-8080-exec-1] o.s.web.servlet.Dis
在 stackoverflow ( Appointment.Save and Appointment.Update always set IsMeeting to true ) 上已经讨论过,EWS
我已经实现了以下两种方法。 我已经完成了 jitsi 设置,其中我的 jitsi、jvb 和 jibri 在单独的服务器上运行。 我使用 docker 完成了 jitsi 设置,我在其中使用不同的容器
我正在使用 Jitsi-Meet iframe Api拥有自定义视频通话功能。它按预期工作。但是我想为此添加一个功能。该功能是在 http 负载时自动加入或自动开始 session 。我该怎么做而不是
我正在使用 Jitsi-Meet iframe Api拥有自定义视频通话功能。它按预期工作。但是我想为此添加一个功能。该功能是在 http 负载时自动加入或自动开始 session 。我该怎么做而不是
我有一个“people”表和一个“meetings”表,其中有两列:Person1_ID 和 Person2_ID。 当我为 person1_ID(该人是“人”之一)和 Person2_ID(也是“人
当我尝试通过 Zuul 网关访问服务 meeting 时,Zuul 无法将请求转发到相应的服务。以下是我面临的错误: nettflix.zuul.exception.ZuulException: Fo
我没有得到任何引用在我的 android 应用程序中添加 google meet 以通过提供其 sdk 的 zoom 等应用程序安排 session 最佳答案 没有适用于 Google Meet 的
我很好奇新的“打开/关闭”background blur functionality的 Google Meet(目前正在测试中)。我调查了一下,似乎正在使用 Tensorflow Lite 楷模: s
在 Google Meet ,如果您单击“立即演示”,然后单击“Chrome 选项卡”,它会打开一个窗口,让您可以从另一个选项卡共享。这与标准 Screen Capture API 不同。就好像你只是
在执行 jitsi-meet sdk 时遇到问题。 这些是正在发生的问题。 /Users/jeetk/Desktop/tring/iostring/ios/Pods/Target Support Fi
我有一台运行 Ubuntu 18.04 和 Nginx 的服务器,并在其上托管了一个功能齐全的 Jitsi Meet 实例。 另一方面,我有 2 个其他站点(一个是响应前端,另一个是后端),我需要它们
我正在使用 MediaDevices.getDisplayMedia()记录用户的屏幕。 理论上,我无法从 JS 缩小选择范围...... The specified constraints can'
我想添加仅允许经过身份验证的用户在 Jitsi Meet 中创建 session 的功能。我看到外部 API 的 jwt 参数、config.tokenAuthUrl 和 lib-jitsi-meet
我一直在查看 Jitsi Meet 平台。看起来很有希望在我的项目中使用。我无法在 Windows 服务器上安装 Jitsi Meet。没有可用于在 Windows 平台上安装的适当文档。 请分享在
我正在尝试为 this block 创建 jQuery 效果。这个想法是,当鼠标悬停在其他照片上时,其他照片会“看着”所选的照片。这是 html 代码。 ...
考虑这个函数,我正在使用 Django 和 torchadoweb def MeetingRecord(userid,mtngid,mesg): obj = Usage() obj.
如何获得“Google Classroom Meet Links”,有没有人找到从 API 或 vs. 中提取此信息的方法?我可以获得类(class)代码、教师电子邮件和链接,但无法访问类 sessi
我今天在我的 Chrome 中注意到了这一点。 Google Meet 在其“疑难解答”面板中显示了 CPU 使用率图表。我想知道是否有针对此的现有 API,或者这是一个我不知道的聪明技巧。 最佳答案
我是一名优秀的程序员,十分优秀!