我想在Spring中创建一个页面,其中包含url
http://myapp.com/sign-in?email=myemail@提供商。通用域名格式
密码
是用户每次想要登录时通过电子邮件收到的一次性密码。
每当用户访问此页面时,我希望发生两件事:
我已经完成了第一部分:
@Autowired
private var userRepository: UserRepository? = null
@GetMapping
fun signIn(@RequestParam email:String, @RequestParam(name="pw") password:String): RedirectView {
// Is the password correct?
// TODO: Read password hash of the user
val existingUser: Optional<UserInfo>? = userRepository?.findById(email)
if (existingUser == null) {
return redirectToErrorPage("Please register with your e-mail address first")
}
if (!existingUser.isPresent) {
return redirectToErrorPage("Please register with your e-mail address first")
}
val hashInDb = existingUser.get().passwordHash
val hashInParam = PasswordHashCalculator.calculateHash(password)
if (!hashInDb.equals(hashInParam)) {
return redirectToErrorPage("Invalid user name and/or password")
}
// TODO: Display the main page
return null
}
我需要如何更改代码才能显示主页(src/main/resources/state
中的超文本标记语言文件),但前提是通过身份验证检查?
更新1:按照此处的建议使用返回类路径资源(“main.html”)没有帮助。
@RobScully是对的,您不应该这样处理授权。您可以做的是启用sping-Security并使用Spring Security注释来处理这种情况。使用以下依赖项并设置基本的Spring Security设置。
在执行方法之前,可以使用诸如PreAuthorize()之类的注释来验证用户权限。如果坚持的话,您甚至可以将此注释添加到控制器方法中,以便在服务每个请求之前进行验证。
您可以设置和LDAP服务器或Oauth,甚至使用数据库进行身份验证(如果您正在进行演示或其他工作)。
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring-security.version}</version>
</dependency>
使用如下配置类来配置安全性:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery(
"select username,password, enabled from users where username=?")
.authoritiesByUsernameQuery(
"select username, role from user_roles where username=?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") //To check admin role permission
.and()
.formLogin().loginPage("/login").failureUrl("/login?error") //provide failure url
.usernameParameter("username").passwordParameter("password")
.and()
.logout().logoutSuccessUrl("/login?logout")
.and()
.exceptionHandling().accessDeniedPage("/403")
.and()
.csrf();
}
}
github中的这个示例项目提供了一个可以使用Spring Security性的基本设置:
https://github.com/mohchi/spring-security-request-mapping
参考用途:https://www.mkyong.com/spring-security/spring-security-form-login-using-database/
你不应该这样做。通过http以明文形式发送密码不是一种好的做法。
这里有使用Spring Security性进行基本身份验证的示例。
https://www.baeldung.com/spring-security-basic-authentication
https://www.baeldung.com/securing-a-restful-web-service-with-spring-security
然后您可以做的是,如果您遵循本教程,为初学者分配一个内存用户。然后您可以将您的身份验证详细信息编码给该用户。然后对于每个用户,您可以发送身份验证详细信息,并且没有人可以窥探用户名和密码,因为它们会通过线路传递,并且您的请求在到达您的控制器之前得到处理。这样,您就可以将业务逻辑与身份验证分离。
这至少是一个开始。希望这有帮助。
return ClassPathResource("static/main.html") should answer your question, don't forget to specify `static` folder at the beginning as `ClassPathResource` points to the `resources` folder
我使用的是React路由器V4,我有此路由器的配置: 是可选的语言参数,它应该与模式匹配,例如、或不匹配。例如,应用程序利用这些路由: 另外,我还有一个额外的组件,在其中我定义了函数的路由: 因此,我希望实现的结果是,只接受允许的语言代码(和空参数),而不接受的代码将被重定向到组件。 可能吗?如何实现这一目标? 非常感谢这个例子
问题内容: 我的页面上有很多数据,表格和内容。我想制作一个仅显示很少的选定内容的印刷版本。 我不是在写另一个仅用于打印的页面,而是在阅读CSS的“ @media print”功能。 首先,哪些浏览器支持它?由于这是一项内部功能,因此只有最新的浏览器支持它才可以。 我当时正在考虑使用“可打印”类标记一些DOM元素,并且基本上将“ display:none”应用于除具有“可打印”类的那些元素之外的所有
我正在使用和来记录WebApi2项目。我有一个使用XML正文并返回文本响应的操作。我希望留档包含XML输入的示例-例如
问题内容: 我正在使用JDK 1.6.0_26中的VisualVM来分析在Tomcat下运行的Java Webapp,但是VisualVM经常告诉我它没有足够的内存来拍摄快照,并使用-Xmx开关为Netbeans提供更多的内存。 。问题是,我在Netbeans之外运行VisualVM,那么如何为jvisualvm.exe提供JVM参数? 问题答案: 应该能够修改内存中的设置 并且在排队。
编辑:为了确保时区对象可用: sun.util.calendar.zoneinfo[id=“欧洲/柏林”,offset=3600000,dstsavings=3600000,usedaylight=true,transitions=143,lastrule=java.util.simpletimezone[id=欧洲/柏林,offset=3600000,dstsavings=3600000,use
问题内容: 在调试使用AJAX的jQuery应用程序时,我经常需要查看服务返回给浏览器的json。因此,我将JSON数据的URL放入地址栏中。 这对ASPNET很好,因为在发生编码错误的情况下,我可以在浏览器中看到ASPNET诊断错误: 但是,当服务器端代码正常工作并实际返回JSON时,IE会提示我下载它,因此看不到响应。 我可以让IE不这样做吗,换句话说,就是像纯文本一样显示它吗? 我知道如果将