在我的Spring Boot
应用程序中,我遇到一个奇怪的问题。
登录后,我的Web应用程序重定向到JS页面(bootstrap-table.js
)。此页面并非每次都出现,而仅在第一次登录时出现,在后续登录中,我们将重定向到正确的页面“ home.html”。
在我的WebApp中,我使用:thymeleaf
和bootstrap4
。
这是我的安全配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/resources/**").permitAll()
.antMatchers("/resetpwd/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.failureUrl("/?login_error")
.defaultSuccessUrl("/home")
.and()
.logout()
.logoutUrl("/logout")
.logoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"))
.permitAll()
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
.deleteCookies("remember-me")
.and()
.rememberMe()
.and()
.sessionManagement();
}
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**", "/webjars/**");
}
}
我在default.html
中定义了 css 和 js 文件,登录表单位于header.html中:
<ul class="nav navbar-nav pull-right ml-auto " sec:authorize="isAnonymous()">
<li class="nav-item">
<a class="nav-link dropdown-toggle " href="#" data-toggle="dropdown" th:text="#{login}"> </a>
<ul class="dropdown-menu form-wrapper">
<li>
<form th:action="@{/login}" data-parsley-validate="" method="POST" class="form login" >
<div class="col-sm-12 text-center" th:text="#{login}" ></div>
<p th:if="${loginError}" style="color: red;" th:text="#{login_unsuccessful}"></p>
<br />
<div class="form-group">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text"><i class="fas fa-user text-info"></i></div>
</div>
<input type="text" class="form-control" id="username" name='username' placeholder="Username" required>
</div>
</div>
<div class="form-group">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text"><i class="fas fa-key text-info"></i></div>
</div>
<input type="password" class="form-control" id="password" name="password" placeholder="Password" required>
</div>
</div>
<input type="submit" class="btn btn-primary btn-block text-center" value="Login">
<div class="form-footer">
<a data-target="#modalPwd" data-toggle="modal" href="#modalPwd" id="pwdDmntct" th:text="#{pwdDimenticata}"></a><br/><br/>
</div>
</form>
</li>
</ul>
</li>
</ul>
在默认主体中,我具有JS的定义。
<body>
<!-- page content -->
<div class="container-fluid">
<nav th:replace="~{/fragments/header :: header}"></nav>
<div class="container-fluid">
<div layout:fragment="content"></div>
</div>
</div>
<!-- /page content -->
<script th:src="@{/js/parsley/parsley.js}" type="text/javascript"></script>
<script th:src="@{/js/parsley/it.js}" type="text/javascript"></script>
<script th:src="@{/bootstrap-table/bootstrap-table.min.js}" type="text/javascript"></script>
<script th:src="@{/bootstrap-table/bootstrap-table-it-IT.min.js}" type="text/javascript"></script>
<script th:src="@{/webjars/bootstrap-datepicker/js/bootstrap-datepicker.min.js}" type="text/javascript"></script>
<script th:src="@{/webjars/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js}" type="text/javascript"></script>
<script th:src="@{/webjars/select2/dist/js/select2.min.js}" type="text/javascript"></script>
<script type="text/javascript" th:inline="javascript">
$(function () {
if($('form').length){
$('form').parsley().on('form:validated', function(e) {
if (e.validationResult) {
$('input[type=submit]').attr('disabled', 'disabled');
}
});
}
$('body').on('click', '[data-toggle="modal"]', function(){
$($(this).data("target")+' .modal-content').load($(this).attr('href'));
});
});
</script>
</body>
有人可以帮助我了解此问题吗? 谢谢
答案 0 :(得分:1)
您可能已重定向到“ bootstrap-table.js”,因为您正试图以注销用户访问它。您将被重定向到登录页面,此后,您将被重定向回到您在登录重定向之前尝试访问的URL。
如果您希望每次用户成功登录时都重定向到“ / home”,那么无论用户登录前要访问哪个页面,都应使用.defaultSuccessUrl("/home", true)
,而不要使用.defaultSuccessUrl("/home")
。 / p>
答案 1 :(得分:0)
除了@Sim Dim的答案之外,我还想在登录到登录之前想要的页面后保留自动重定向功能。因此,我向控制器添加了js file path
并重定向到默认页面。例如
@Controller
public HomeController {
@GetMapping("/bootstrap.js") //whichever file it is
public String falseLoginRedirect(Model model) {
return "redirect:/home"; //redirect to my preferred default
}
}