spring-boot - 如何设置自定义登录页面而不是spring security默认登录页面
问题描述
我将 Angular 与 Spring Boot 集成,我想设置自己的登录页面,但是当我运行我的应用程序时,它会显示 Spring Security 默认登录页面。我更改了配置文件中的所有内容,但它仍然显示 spring security 默认登录页面。如何设置自定义登录页面?
安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("nilmani").password("{noop}akj@159")
.roles("USER");
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.component.html")
.loginProcessingUrl("/perform_login")
.defaultSuccessUrl("/dashboard.component.html", true);
//.failureUrl("/login.html?error=true")
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
login.component.html
<div class="app-body">
<main class="main d-flex align-items-center">
<div class="container">
<div class="row">
<div class="col-md-8 mx-auto">
<div class="card-group">
<div class="card p-4">
<div class="card-body">
<form>
<h1>Login</h1>
<p class="text-muted">Sign In to your account</p>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"><i class="icon-user"></i></span>
</div>
<input type="text" class="form-control" placeholder="Username" [(ngModel)]="username" [ngModelOptions]="{standalone: true}" autocomplete="username" required>
</div>
<div class="input-group mb-4">
<div class="input-group-prepend">
<span class="input-group-text"><i class="icon-lock"></i></span>
</div>
<input type="password" class="form-control" placeholder="Password"[(ngModel)]="password" [ngModelOptions]="{standalone: true}" autocomplete="current-password" required>
</div>
<div class="row">
<div class="col-6">
<button type="button" (click)="dologin()" class="btn btn-primary px-4">Login</button>
</div>
<div class="col-6 text-right">
<button type="button" class="btn btn-link px-0">Forgot password?</button>
</div>
</div>
</form>
</div>
</div>
<div class="card text-white bg-primary py-5 d-md-down-none" style="width:44%">
<div class="card-body text-center">
<div>
<h2>Sign up</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<button type="button" class="btn btn-primary active mt-3">Register Now!</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
解决方案
您的 SecurityConfig 很好。我也是这样做的。你必须确保你有一个控制器,它接受这个 url 并提供正确的页面。通常你没有定义一个 html 页面!正确的 url 可能只是/login。
所以你的 SecurityConfig 看起来像:
.formLogin()
.loginPage("/login")
例如你的控制器:
@Controller
@RequestMapping(value="/login")
@Scope(value="session")
public class LoginController extends AbstractWebController {
@GetMapping
public ModelAndView loginView() {
ModelAndView mav = this.getModelAndView("login");
return mav;
}
// further code goes here
}
例如,此控制器返回一个 jsp 页面,您可以使用 Angular 或其他方式根据您的需要对其进行样式设置。
推荐阅读
- php - php中数据库的登录问题
- javafx - 展开 TabPane 内的 TableView 以填满整个屏幕
- xamarin - 如何逐个单元格或逐行填充 NSGridView?
- list - 如何将列表传递给函数?
- javascript - 关于 if 语句的说明
- javascript - 模拟网页并作为实时视频发送给用户
- java - Java Testng 单元测试:Spring 无法在 BeforeSuite 或 BeforeTest 之前创建对象
- java - 联合继承策略
- react-admin - 加载任意数据的建议方法
- automata - 在 Σ={a,b} 上为以下语言构造 DFA