我正在尝试将Spring Security与数据库一起使用,在遵循一个示例之后,我可以登录(调用<code>onAuthenticationSuccess</code>),但我没有被重定向到默认页面,而是得到了一个空文件下载。我希望重定向到默认页面defaultSuccessUrl(“/”,true)
@GetMapping(path = "/")
public String displayInitialPage(Model model) {
return "index";
}
安全配置类:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private WebApplicationContext applicationContext;
@Autowired
private UserService userDetailsService;
@Autowired
private DataSource dataSource;
@Autowired
private AuthenticationSuccessHandlerImpl successHandler;
@PostConstruct
public void completeSetup() {
userDetailsService = applicationContext.getBean(UserService.class);
}
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(encoder()).and()
.authenticationProvider(authenticationProvider()).jdbcAuthentication().dataSource(dataSource);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/register", "/style", "/script");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().antMatchers("/login").permitAll().and().formLogin()
.loginPage("/login").defaultSuccessUrl("/", true).permitAll().successHandler(successHandler).and().csrf().disable();
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
authProvider.setUserDetailsService(userDetailsService);
authProvider.setPasswordEncoder(encoder());
return authProvider;
}
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder(11);
}
/**
* Enables activation of automatic resolving of spring-data specific expressions annotated on classes
* @return SecurityEvaluationContextExtension
*/
@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
return new SecurityEvaluationContextExtension();
}
我更改了安全配置类,如下所示:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userDetailsService;
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(encoder());
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/register", "/style", "/script");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().antMatchers("/login").permitAll().and().formLogin()
.loginPage("/login").defaultSuccessUrl("/", true).permitAll();
}
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder(11);
}
}
这意味着浏览器无法识别响应,假设它是一个文件(最后的手段)
您有此控制器:
@GetMapping(path = "/")
public String displayInitialPage(Model model) {
return "index";
}
因此,Spring将获取值"index"
并尝试将其映射到某些内容。这里的幕后发生了很多魔法。
假设您正在使用Spring Boot并且您有一个gradle构建,您的依赖项:
compile group: "org.springframework.security", name: "spring-security-core", version: "$springSecurityVersion"
compile group: "org.springframework.security", name: "spring-security-web", version: "$springSecurityVersion"
compile group: "org.springframework.boot", name: "spring-boot-starter-web", version: "$springBootVersion"
compile group: "org.springframework.boot", name: "spring-boot-starter-security", version: "$springBootVersion"
compile group: "org.springframework.boot", name: "spring-boot-starter-thymeleaf", version: "$springBootVersion"
compile group: "org.thymeleaf.extras", name: "thymeleaf-extras-springsecurity5", version: "$thymeleafExtrasSpringSecurityVersion"
注意最后两行。这些使thymeleaf成为模板引擎。Spring将在目录中查找
./src/main/resources/templates
对于一个名为index.html
的文件
该文件可能如下所示:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
<head>
<title>Spring Security - Simple Flow for Spring Boot Authentication</title>
<meta charset="utf-8" />
</head>
<body>
<div style="float: right" th:fragment="logout" sec:authorize="isAuthenticated()">
<div style="float:left">
<span style="font-weight:bold">User: </span><span sec:authentication="name"></span>
</div>
<div style="float:none"> </div>
<div style="float:right">
<form action="#" th:action="@{/local/logout}" method="post">
<input type="submit" value="Local Logout" />
</form>
</div>
</div>
<h1>Success</h1>
</body>
</html>
在Spring Web MVC中,有一个名为bean的 bean
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/templates/");
viewResolver.setSuffix(".html");
....
return viewResolver;
}
Spring Boot有一个名为自动配置的组件。因此,它会查找存在的库并相应地配置解析器。有用于遗留应用程序的JSP解析器,当您想将JSON、XML或其他格式发送回来时,有内容映射解析器,还有我首选的thymeleaf,用于发送回超文本标记语言内容。
在任何给定时间,您都可以配置多个解析器。
我的社区回购有很多例子可以玩。
https://github.com/fhanik/spring-security-community/tree/master/samples
我们的团队正在使用Spring boot(2.2.2)开发一个web应用程序。它使用Spring security来处理登录过程。我们希望应用程序在登录前重定向回页面(例如,用户访问)http://example.com/foo/bar - 除了应用程序偶尔指向默认页面(例如,http://example.com)而不是登录前的页面。发生这种情况时,登录前的页面似乎没有保存在会话中(根据我的队友的
我正在尝试使用MVC客户端设置IdentityServer4。 一切正常,直到我想添加ASP身份。当我添加代码以使用SQL server和Identity时,成功登录后,Identity server不会将我重定向回客户端,但它只是“刷新”页面。 IdentityServer应用程序启动: 在IdentityServer中配置 在MVC客户端中启动: 来自IdentityServer的日志: 我只
问题内容: 我知道之前曾有人问过这个问题,但是我在这里面临一个特殊的问题。 我使用Spring Security 3.1.3。 我的Web应用程序中有3种可能的登录案例: 通过登录页面登录:确定。 通过受限页面登录:也可以。 通过非受限页面登录:不好,…每个人都可以访问“产品”页面,并且用户可以在登录后发表评论。因此,同一页面中包含一个登录表单,以允许用户进行连接。 情况3)的问题是我无法设法将用
我知道这个问题以前有人问过,但我现在面临一个特殊的问题。 我使用spring security 3.1.3。 我的web应用程序中有3种可能的登录情况: 通过登录页登录:确定。 通过受限页面登录:也可以。 通过非受限页面登录:不确定...每个人都可以访问“产品”页面,如果用户已经登录,他可以发表评论。因此登录表单包含在同一页面中,以便允许用户进行连接。 案例3)的问题是,我无法将用户重定向到“产品
MvcConfig方法如下所示:
我正在使用Spring Security和前端reactJS的Spring Boot构建一个应用程序。我的代码可以很好地进行身份验证。但现在我计划将用户重定向到他以前请求的页面,以防他再次登录。 我可以从成功处理程序中提取 targetUrl,即上一页,但是当我在 UI 上执行控制台.log(数据)时。我得到的是原始的html数据而不是URL名称。我不知道为什么以及如何打开这样的原始 html 代