我的登录页面http://localhost:8080/nradmin/welcome,主页(登录成功后)http://localhost:8080/nradmin/home
我想注销,不再能够访问任何其他页面,如主页,但只能访问欢迎(登录)页面。如果我键入http://localhost:8080/nradmin/home在注销后的浏览器上,我可以继续访问主页,而无需登录。
我已经实现了从抽象类WebSecurity配置适配器重写的以下方法:
@Override
protected void configure(HttpSecurity http) throws Exception { http
.authorizeRequests()
.antMatchers("/welcome").permitAll()
.antMatchers("/home", "/account/**", "/price/**").hasRole("ADMIN")
.antMatchers("/home", "/account/**", "/price/**").access("hasRole('ROLE_ADMIN')")
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/welcome")
.defaultSuccessUrl("/home")
.and()
.logout()
.invalidateHttpSession(true)
.clearAuthentication(true)
.logoutSuccessUrl("/welcome")
.logoutUrl("/welcome")
.deleteCookies()
.permitAll()
.and()
.exceptionHandling()
.accessDeniedPage("/welcome")
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication() .withUser("username").password(passwordEncoder().encode("12345")).roles(LoginDataConstants.ROLE_ADMIN)
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
有人知道怎么做吗?
添加CSRF
来自spring文档的参考。
将使用URL执行注销/使用任何HTTP方法请求注销
@Override protected void configure(HttpSecurity http) throws Exception {
http.
logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
}
您还可以在此处使用相同的方法引用一个关于堆栈溢出的很好示例
当我遇到这个问题时,我用了这句话
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");
哪里
.logoutSuccessUrl(“/登录”)是用户将重定向到的页面。
您可以将代码重新分解为以下内容
@Override
protected void configure(HttpSecurity http) throws Exception { http
.authorizeRequests()
.antMatchers("/welcome").permitAll()
.antMatchers("/home", "/account/**", "/price/**").hasRole("ADMIN")
.antMatchers("/home", "/account/**", "/price/**").access("hasRole('ROLE_ADMIN')")
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/welcome")
.defaultSuccessUrl("/home")
.and()
.logout()
.and() // This section is re-factored.
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/welcome").deleteCookies("JSESSIONID") //Or try .logoutSuccessUrl("/nradmin/welcome")
.invalidateHttpSession(true)
.permitAll()
.and()
.exceptionHandling()
.accessDeniedPage("/welcome")
.and()
.sessionManagement()
.sessio hinCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
更新:这是一个修改版本。这基本上就是我在项目中使用的内容,除了这一部分:
.and()
.exceptionHandling()
.accessDeniedPage("/welcome")
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
所以,我认为它应该起作用;否则,我认为这可能是项目中其他地方存在的设置问题/配置。请尝试以下示例。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/nradmin/welcome", "/home", "/account/**", "/price/**").hasRole("ADMIN")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/nradmin/welcome")
.permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/nradmin/welcome").deleteCookies("JSESSIONID")
.invalidateHttpSession(true)
.permitAll()
.and()
.exceptionHandling()
.accessDeniedPage("/nradmin/welcome")
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
}
我想这可能是因为在方法“logoutUrl”和“logoutSuccessUrl”中有相同的url。
我建议您将“注销url”更改为其他路径,例如,只需“注销”,然后尝试按该url执行注销。它应该完成注销任务并重定向到logoutSuccessUrl,即欢迎
处理完提交无效数据的情况,本节我们要完成注册表单的功能,如果提交的数据有效,就把用户存入数据库。我们先尝试保存用户,如果保存成功,用户的数据会自动存入数据库,然后在浏览器中重定向,转向新注册用户的资料页面,页面中还会显示一个欢迎消息,构思图如图 7.19 所示。如果保存用户失败了,就交由上一节实现的功能处理。 图 7.19:注册成功后显示的页面构思图 7.4.1 完整的注册表单 要完成注册表单的功
我可以成功地将用户数据发送到服务器,但是我很难从服务器获得响应(用户注册)。请查看我的代码,并告诉我,如何获得Json响应(用户注册)。我已经尝试使用布尔和字符串类型的Asynctask来获得响应。但是在这里我将字符串保持为空。请告诉我如何获得Json响应。提前感谢!!! }
https://alpha.app/#session_state=5AD94ADB-39F5-4664-ABC8&code=7BA2-488E-9BF4-AD7B1A969904.B3D26ED7-649A-454D-B6FF-246792277042
我在spring boot应用程序中使用基于java的Spring Security配置。当用户单击注销链接时,用户将被重定向到登录页面。在这里,在这种情况下,我需要在注销成功url中传递一个自定义参数。 例如,当我注销时,应用程序被重定向到http://localhost:8080/app/login但我希望它有一个如下所示的参数http://localhost:8080/app/login?i
问题内容: 我想要在spring成功注册后自动登录:我有一个受保护的页面,需要登录才能访问它们,我要在注册后跳过登录页面并进行自动登录,以便用户可以看到受保护的页面有我吗?我正在使用spring 3.0,spring security 3.0.2,该怎么做? 问题答案: 可以通过以下方式(半伪代码)通过spring安全性完成此操作: 更新:仅包含注册后如何创建会话
问题内容: 阅读后:在Java中获取“外部” IP地址 码: 我以为自己是赢家,但出现以下错误 我认为这是因为服务器响应速度不够快,是否有任何方法可以确保它将获得外部ip? 编辑:好的,所以它被拒绝了,其他人知道另一个可以执行相同功能的站点 问题答案: 在运行以下代码之前,请先查看以下内容:http : //www.whatismyip.com/faq/automation.asp