我从spring文档中发现了一些可以覆盖登录控制器和表单的内容。我只想在保留默认控制器的同时覆盖登录表单本身。我发现了这个:
在grails安全性插件中,登录gsp页面位于grails-app / views / login / auth.gsp,控制器位于grails-app / controllers / grails / plugin / springsecurity / LoginController.groovy。我不认为只需创建自己的实现就可以覆盖控制器,但是您应该能够通过在您的应用中将自己的auth.gsp放在上面显示的相同路径中来覆盖gsp页面。
https://plus.google.com/117486613280979732172/posts/cvqcfAQVWE6
然而,这只是无法覆盖页面,并且默认页面不断出现。有没有人用Grails 3和Spring安全库做到这一点?
编辑: 我通过使用这些库并设置自己的bean来使用OAuth2。我认为另一种方式可能是使用grails插件来保证弹簧安全。有没有办法使用这些库覆盖登录页面?
compile "org.springframework.boot:spring-boot-starter-security"
compile "org.springframework.security.oauth:spring-security-oauth2:2.0.8.RELEASE"
答案 0 :(得分:2)
好的,既然我没有使用grails spring安全插件,我需要在此处的指导下更换登录页面: http://docs.spring.io/spring-security/site/docs/3.2.x/guides/form.html
基本上,我必须创建一个LoginController
class LoginController {
def auth() {
}
def error() {
}
然后,我将视图放在相应的路径中:views / login / auth,views / login / error
以下是auth.gsp示例
<html>
<body>
<h1 id="banner">Login to Security Demo</h1>
<form name="f" action="/login/auth"
method="POST">
<table>
<tr>
<td>Username:</td>
<td><input type='text' name='username' /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password'></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan='2'><input name="submit" type="submit"> <input name="reset" type="reset"></td>
</tr>
</table>
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
</form>
</body>
</html>
然后在配置HttpSecurity:
@Override
public void configure(HttpSecurity http) {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage('/login/auth')
.defaultSuccessUrl("/")
.failureUrl("/login/error")
.usernameParameter("username").passwordParameter("password")
.permitAll()
}
使用grails安全插件会很好,但我无法弄清楚如何使用它来运行OAuth2。如果有人对此有指导,我会改变我接受的答案。
答案 1 :(得分:1)
这是一种更为简单和系统化的方法。没有所有这些手动复制粘贴工作。
grails s2-quickstart
命令配置基本用户和角色域(您可以使用s2-quickstart配置其他方面); < / LI>
grails s2ui-override auth
命令覆盖 login / auth 表单(这将创建登录表单,以便您覆盖它)grails s2ui-override layout
覆盖表单的布局(这将创建springSecurityUI.gsp布局,以便您覆盖它)希望它有所帮助。