實現Spring Boot登錄系統

一、Spring Boot登錄實現

Spring Boot提供了快速開發的能力,而搞定登錄與認證也並不難。本文將以經典的用戶名密碼方式演示如何使用Spring Boot實現最簡單的登錄。下面是Spring Boot的RESTful風格的登錄介面代碼。

@GetMapping("/login")
public String login(@RequestParam String username, @RequestParam String password, HttpSession session) {
   if ("admin".equals(username) && "123456".equals(password)) {
      session.setAttribute("user", username);
      return "success";
 } else {
      return "fail";
 }
}

這個介面接收用戶名和密碼,如果用戶名和密碼是正確的,則在會話中保存當前用戶,並返回success。否則,返回fail。如果需要JSON格式的返回結果,則可以將success 和 fail替換成Map即可。

二、Spring Cloud Gateway

在微服務架構中,Spring Cloud Gateway是一個網關服務,用於路由請求並執行過濾器。Spring Cloud Gateway已經提供了非常出色的過濾器機制用於實現認證、鑒權、流量控制等。在Spring Boot中,使用Spring Cloud Gateway可以輕鬆實現複雜的網關服務。

三、Spring Boot登錄功能

Spring Boot中的登錄功能通過Spring Security框架實現。這個框架已經完成了許多認證、鑒權、登錄等通用的功能。在Spring Boot應用中,只需要簡單地引入Spring Security依賴,然後編寫一些配置即可使用。下面是Spring Security的一個最簡單的配置示例。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http
          .authorizeRequests()
              .antMatchers("/", "/home").permitAll()
              .anyRequest().authenticated()
              .and()
          .formLogin()
              .loginPage("/login")
              .permitAll()
              .and()
          .logout()
              .permitAll();
   }
}

這個配置禁止匿名訪問所有頁面,如果沒有授權的用戶嘗試訪問頁面,會被重定向到登錄頁面。這裡我們使用了自定義的登錄頁面。提交登錄表單時,Spring Security將通過POST請求/check進行認證。如果認證成功,則用戶將被重定向到重定向到之前訪問的頁面,否則,用戶將被重定向到登錄頁面。

四、Spring Boot的條件查詢

在Spring Boot中,使用JPA實現條件查詢很簡單。下面是一個基於Spring Data JPA實現的簡單條件查詢。

@Repository
public interface UserRepository extends JpaRepository {

   List findByAgeBetween(int minAge, int maxAge);

}

在這個示例中,我們創建了一個UserRepository的介面,它繼承了JpaRepository(一個通用的基於Spring Data JPA的Repository),並定義了一個findByAgeBetween方法用於查詢年齡在指定範圍內的用戶。

五、Spring Boot登錄攔截

在Spring Boot中,可以通過自定義攔截器來攔截用戶登錄請求。下面是一個示例性的自定義登錄攔截器的代碼。

public class LoginInterceptor implements HandlerInterceptor {
    
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
           throws Exception {
       HttpSession session = request.getSession();
       String user = (String) session.getAttribute("user");
       if (user == null) {
           String url = "/login";
           response.sendRedirect(url);
           return false;
       }
       return true;
   }
}

在這個示例中,我們實現了一個基於Spring Boot的HandlerInterceptor介面的自定義登錄攔截器。它通過檢查會話中是否存在用戶來攔截未登錄的用戶請求。如果用戶未登錄,則將請求重定向到登錄頁面。

六、Spring Boot登陸邏輯

在Spring Boot中,登錄邏輯可以被視為一個授權過程。在輸入用戶名和密碼之後,Spring Boot通過Spring Security框架進行驗證,並在認證成功後通過會話進行授權。下面是一個Spring Boot登陸邏輯的簡單示例。

@GetMapping("/login")
public String login(@RequestParam String username, @RequestParam String password, HttpSession session) {
    if ("admin".equals(username) && "123456".equals(password)) {
       session.setAttribute("user", username);
       return "success";
    } else {
       return "fail";
    }
}

在這個示例中,我們實現了一個基於Spring Boot的RESTful風格的登錄介面。它接收用戶名和密碼並在Spring Security框架中進行身份驗證。如果驗證成功,則將用戶添加到會話中。

七、Spring Boot登錄系統

Spring Boot提供了很多組件來幫助您快速構建完整的用戶登錄系統。下面是一個經典的Spring Boot登錄系統的示例。

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

   @Autowired
   private UserDetailsServiceImpl userDetailsService;

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http
           .csrf().disable()
           .authorizeRequests()
               .antMatchers("/", "/home", "/register").permitAll()
               .anyRequest().authenticated()
               .and()
           .formLogin()
               .loginPage("/login")
               .permitAll()
               .and()
           .logout()
               .permitAll()
           .and()
           .sessionManagement()
               .maximumSessions(1);
   }

   @Autowired
   public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
       auth.userDetailsService(userDetailsService);
   }
}

@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional optionalUser = userRepository.findByUsername(username);
        User user = optionalUser.orElseThrow(() -> new UsernameNotFoundException("Username not found!"));
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), Collections.emptyList());
    }
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User register(User user) {
        Optional optionalUser = userRepository.findByUsername(user.getUsername());
        if (optionalUser.isPresent()) {
            throw new RuntimeException("Username already exists!");
        }
        user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
        return userRepository.save(user);
    }
}

在這個示例中,我們使用了Spring Boot的許多組件來構建完整的用戶登錄系統,包括Spring Security框架、Spring Boot的依賴注入和數據訪問等。這個系統允許用戶註冊和登錄,所有由Spring Security控制的受保護資源只能由已登錄的用戶訪問。

八、Spring Boot登錄怎麼寫

Spring Boot的登錄邏輯非常簡單,一般只需要實現一個最基本的用戶名密碼驗證即可。下面是一個非常基本的Spring Boot登錄的代碼示例。

@GetMapping("/login")
public String login(@RequestParam String username, @RequestParam String password, HttpSession session) {
   if ("admin".equals(username) && "123456".equals(password)) {
      session.setAttribute("user", username);
      return "success";
   } else {
      return "fail";
   }
}

在這個示例中,我們實現了一個基於Spring Boot的RESTful風格的登錄介面。它需要用戶輸入用戶名和密碼,並在Spring Security框架中進行驗證。如果驗證成功,則將用戶添加到會話中。

九、Spring Boot怎麼實現的

Spring Boot提供了快速開發的能力,它通過許多強大的組件來簡化應用程序開發。在Spring Boot中,實現登錄系統非常容易,只需要使用Spring Security框架來進行身份驗證和授權即可。下面是一個基於Spring Boot實現的完整登錄系統的示例。

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

   @Autowired
   private UserDetailsServiceImpl userDetailsService;

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http
           .csrf().disable()
           .authorizeRequests()
               .antMatchers("/", "/home", "/register").permitAll()
               .anyRequest().authenticated()
               .and()
           .formLogin()
               .loginPage("/login")
               .permitAll()
               .and()
           .logout()
               .permitAll()
           .and()
           .sessionManagement()
               .maximumSessions(1);
   }

   @Autowired
   public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
       auth.userDetailsService(userDetailsService);
   }
}

@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional optionalUser = userRepository.findByUsername(username);
        User user = optionalUser.orElseThrow(() -> new UsernameNotFoundException("Username not found!"));
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), Collections.emptyList());
    }
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User register(User user) {
        Optional optionalUser = userRepository.findByUsername(user.getUsername());
        if (optionalUser.isPresent()) {
            throw new RuntimeException("Username already exists!");
        }
        user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
        return userRepository.save(user);
    }
}

在這個示例中,我們使用了Spring Boot的許多組件來構建完整的用戶登錄系統。首先,我們使用了@EnableWebSecurity註解啟用Spring Security框架,然後在WebSecurityConfigurerAdapter中配置了Spring Security。同時,我們實現了一個UserDetailsService介面,用於載入用戶相關信息。最後,我們使用Spring Boot的數據訪問組件對數據進行操作。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/271450.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 14:56
下一篇 2024-12-16 14:56

相關推薦

發表回復

登錄後才能評論