ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
如果没有登录则重定向到登录页。步骤如下: <br/> **1. 配置认证** ```java @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { //配置认证 http.formLogin() .loginPage("/to/login") //登录页面 .loginProcessingUrl("/login") //登录表单提交地址 .successForwardUrl("/success") //登录成功之后跳转到哪个地址 .failureForwardUrl("/fail");//登录失败之后跳转到哪个地址 http.authorizeRequests() .antMatchers("/layui/**", "/to/login") //配置请求路径 .permitAll() //antMatchers方法指定的URL无需保护,允许通过。 .anyRequest() //其他请求 .authenticated(); //需要认证 //关闭csrf http.csrf().disable(); } } ``` **2. controller层** ```java @Controller public class IndexController { @RequestMapping("/to/login") public String login() { return "login"; } @RequestMapping("/success") public String success() { return "success"; } @RequestMapping("/fail") public String fail() { return "fail"; } } ``` **3. 表单** ```java <form action="/login" method="post"> 用户名:<input type="text" name="username"/><br/> 密码:<input type="password" name="password"/><br/> <input type="submit" value="提交"/> </form> ``` * 表单提交地址`/login`就是配置类中配置的`loginProcessingUrl("/login")`的地址。 * 表单提交方式必须为`post`方式。 * 用户名/密码的`name`属性默认为`username`/`password`。这是因为在过滤器UsernamePasswordAuthenticationFilter中就定好了的。 ```java public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "username"; public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "password"; private String usernameParameter = "username"; private String passwordParameter = "password"; private boolean postOnly = true; ``` 如果想更改,可以如下更改。 ``` @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { //配置认证 http.formLogin() ... .usernameParameter("acct") .passwordParameter("pwd"); } } ``` **4. 测试** 当没有登录时会自动跳转到登录页面 http://localhost:8080/to/login 。 当提交表单时,接口 UserDetailsService 的实现类中的方法 loadUserByUsername 就会被调用来判断账号/密码是否正确。