Spring Security -- 自定义登录

Spring Security – 自定义登录

1 使用formLogin()

http
    .formLogin()
    .loginPage("/myLogin") // 自定义登录页面
    .loginProcessingUrl("/doLogin") // 自定义登录接口
    .permitAll();

2 自定义登录过滤器

SpringSecurity 默认使用的是 UsernamePasswordAuthenticationFilter 过滤器,我们可以实现 AbstractAuthenticationProcessingFilter 类来自定义登录逻辑。

public class CustomLoginFilter extends AbstractAuthenticationProcessingFilter {
   

    //private static final String defaultFilterProcessesUrl = "/login";

    public CustomLoginFilter(String defaultFilterProcessesUrl) {
   
        super(defaultFilterProcessesUrl);
    }


    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
   

        String method = request.getMethod();

        // 仅使用POST方法提交
        if(!"POST".equalsIgnoreCase(method)){
   
            throw new AuthenticationServiceException(
                    "Authentication method not supported: " + request.getMethod());
        }
        // 从Session中取出验证码
        String verify = (String) request.getSession().getAttribute("verify");
        // 从请求中获取验证码
        String code = request.getParameter("code");
        // 检查验证码
        checkCode(code,verify);

        // 从请求中获取 用户名及命名
        String username = request.getParameter("username");
        String password = request.getParameter(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security提供了很多自定义登录的方式,以下是一种常见的自定义登录流程: 1. 创建一个实现了UserDetailsService接口的自定义UserDetailsService类,用于从数据库或其他数据源中获取用户信息。该接口有一个loadUserByUsername方法,根据用户名加载用户信息并返回一个UserDetails对象。 2. 创建一个实现了PasswordEncoder接口的密码编码器类,用于对用户密码进行加密和验证。常见的实现类有BCryptPasswordEncoder和PasswordEncoder,可以根据项目需求选择合适的实现类。 3. 创建一个继承自WebSecurityConfigurerAdapter的配置类,并重写configure方法。在该方法中,可以配置登录页面、登录成功后的跳转页面、登录失败后的处理等。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Autowired private PasswordEncoder passwordEncoder; @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/css/**", "/js/**", "/images/**").permitAll() // 静态资源放行 .antMatchers("/login").permitAll() // 登录页面放行 .anyRequest().authenticated() // 其他请求需要认证 .and() .formLogin() .loginPage("/login") // 自定义登录页面路径 .defaultSuccessUrl("/home") // 登录成功后的默认跳转路径 .failureUrl("/login?error") // 登录失败后的路径 .and() .logout() .logoutUrl("/logout") // 退出登录的路径 .logoutSuccessUrl("/login?logout") // 退出登录后的路径 .and() .csrf().disable(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); } } ``` 4. 在登录页面的表单中,需要包含用户名和密码的输入框,并将表单提交到Spring Security提供的默认登录处理路径("/login")。 这样就完成了一个简单的Spring Security自定义登录流程。你可以根据项目需求进行更多的自定义配置,例如添加记住我功能、验证码等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值