在Grails(3.1.9版)中,我试图找到一种方法,在用户登录后将用户重定向到另一个页面,而不是现在。我以前没有使用过这个应用程序,但是从我注意到的,它使用的是SpringSecurity和SAML,这是我从未使用过的。这是包含登录表单的auth.gsp代码:
<form action="/login/authenticate" method="POST" id="loginForm" class="cssform"
autocomplete="off">
<label for="username"><g:message code='springSecurity.login.username.label'/>:</label>
<div class="pg-input">
<input type="text" name="${usernameParameter ?: 'username'}" id="username"/>
</div>
<label for="password"><g:message code='springSecurity.login.password.label'/>:</label>
<div class="pg-input">
<input type="password" name="${passwordParameter ?: 'password'}" id="password"/>
</div>
<div class="pg-row">
<button class="pg-button square" role="button" type="submit" id="submit"
value="${message(code: 'springSecurity.login.button')}"
>Log in</button>
</div>
</form>
我是新手,但如果我是正确的,action="/login/authenticate"
会引用SpringSecurity。
以下是Config.groovy类代码的一些部分:
@Configuration
@EnableWebSecurity
class Config extends WebSecurityConfigurerAdapter {
...
// Handler deciding where to redirect user after successful login
@Bean
SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler() {
SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler =
new SavedRequestAwareAuthenticationSuccessHandler()
successRedirectHandler.setDefaultTargetUrl("/content")
successRedirectHandler.setAlwaysUseDefaultTargetUrl(true)
return successRedirectHandler
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(delegatingEntryPoint())
http
.httpBasic()
.authenticationEntryPoint(samlEntryPoint())
http
.csrf()
.disable()
http.headers().frameOptions().disable()
http
.addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class)
.addFilterAfter(samlFilter(), BasicAuthenticationFilter.class)
http
.authorizeRequests()
.antMatchers('/admin/**').hasRole('ROLE_ADMIN')
.antMatchers('/panel').hasRole('ROLE_ADMIN')
.antMatchers('/index/**').hasRole('ROLE_ADMIN')
.antMatchers('/admin/**').hasRole('ROLE_ADMIN')
.antMatchers('/item/**').hasRole('ROLE_ADMIN')
.antMatchers('/category/**').hasRole('ROLE_ADMIN')
.antMatchers('/serviceUser/**').hasRole('ROLE_ADMIN')
.antMatchers('/serviceRole/**').hasRole('ROLE_ADMIN')
.antMatchers('/fileLink/**').hasRole('ROLE_ADMIN')
.antMatchers('/serviceUserServiceRole/**').hasRole('ROLE_ADMIN')
.antMatchers("/error").hasRole('ROLE_ADMIN')
.antMatchers("/content").fullyAuthenticated()
.antMatchers("/content/**").fullyAuthenticated()
.antMatchers("/assets/files/**").fullyAuthenticated()
.antMatchers("/**").permitAll()
.antMatchers("/assets/**").permitAll()
.antMatchers("/saml/**").permitAll()
.anyRequest().authenticated()
.anyRequest().hasAnyRole('ROLE_USER', 'ROLE_ADMIN')
http
.logout()
.invalidateHttpSession(true)
.logoutSuccessUrl("/")
}
到目前为止我尝试过:
successRedirectHandler()
方法中,将setDefaultTargetUrl("/content")
更改为setDefaultTargetUrl("https://www.google.com")
并将setAlwaysUseDefaultTargetUrl(true)
更改为setAlwaysUseDefaultTargetUrl(false)
configure(HttpSecurity http)
方法中添加http.loginForm().defaultSuccessUrl("https://www.google.com", true)
目前,在用户登录后,应用程序会从http://localhost:443/login/auth重定向到http://localhost:443/content/index。我需要找到指定此路径的位置,但我不再有任何想法。我也认为它可能与SAML有关,但我不知道如何在此刻使用它并从划痕中学习它可能需要一些时间。告诉我是否应该添加更多信息,因为我不确定我放在这里的内容是否足够。
答案 0 :(得分:0)
令人难以置信的是,经过数小时的研究后,我发布了一个问题并立即找到答案。
我发现app.yml中指定了一个属性 - successHandler.defaultTargetUrl:&#39; / content / index&#39;
更改后,应用程序按我的意愿工作。似乎application.yml属性覆盖了在其他文件中指定的所有内容。