Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan pensijilan keselamatan untuk pembangunan fungsi back-end Java?

Bagaimana untuk melaksanakan pensijilan keselamatan untuk pembangunan fungsi back-end Java?

王林
王林asal
2023-08-07 11:15:201407semak imbas

Bagaimana untuk melaksanakan pensijilan keselamatan untuk pembangunan fungsi back-end Java?

Dengan perkembangan Internet yang berterusan, permintaan orang ramai terhadap keselamatan rangkaian juga semakin tinggi. Apabila membangunkan fungsi back-end Java, pengesahan keselamatan adalah aspek yang tidak boleh diabaikan. Artikel ini akan memperkenalkan cara melaksanakan pengesahan keselamatan untuk pembangunan fungsi back-end Java untuk melindungi akaun pengguna dan keselamatan data.

1. Gunakan JWT untuk mencapai pengesahan dan kebenaran

JWT (Json Web Token) ialah token berasaskan JSON yang digunakan untuk memindahkan maklumat keselamatan antara pelanggan dan pelayan. Ia menyimpan maklumat pengguna dan maklumat kebenaran dalam token melalui penyulitan, mengelakkan pelayan daripada menyimpan maklumat sensitif pengguna.

Berikut ialah contoh kod yang menggunakan JWT untuk pengesahan dan kebenaran:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtils {
    private static final String SECRET_KEY = "your_secret_key";
    private static final long EXPIRATION_TIME = 86400000; // 24小时

    // 生成JWT令牌
    public static String generateToken(String username, String roles) {
        Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
        return Jwts.builder()
                .setSubject(username)
                .claim("roles", roles)
                .setExpiration(expirationDate)
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }

    // 解析JWT令牌
    public static Claims parseToken(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }
    
    // 验证JWT令牌是否过期
    public static boolean isTokenExpired(String token) {
        Claims claims = parseToken(token);
        Date expirationDate = claims.getExpiration();
        return expirationDate.before(new Date());
    }
}

Dalam kod sebenar, anda boleh menggunakan kelas alat ini untuk menjana token JWT dan mengesahkannya dalam antara muka, contohnya:

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public String login(@RequestBody Map<String, String> loginInfo) {
        String username = loginInfo.get("username");
        String password = loginInfo.get("password");

        // 验证用户名密码
        boolean isValid = userService.validateLogin(username, password);
        if (!isValid) {
            return "用户名或密码错误";
        }

        // 生成JWT令牌
        String roles = userService.getUserRoles(username);
        String token = JwtUtils.generateToken(username, roles);

        return token;
    }

    @GetMapping("/userinfo")
    public String getUserInfo(@RequestHeader("Authorization") String token) {
        // 验证令牌是否过期
        if (JwtUtils.isTokenExpired(token)) {
            return "令牌已过期";
        }

        // 解析令牌,获取用户名和角色信息
        Claims claims = JwtUtils.parseToken(token);
        String username = claims.getSubject();
        String roles = (String) claims.get("roles");

        // 根据用户名获取用户信息
        UserInfo userInfo = userService.getUserInfoByUsername(username);

        // 返回用户信息和角色信息
        return "用户名:" + userInfo.getUsername() + ",角色:" + roles;
    }
}

Melalui perkara di atas contoh kod, Kita dapat melihat bahawa apabila pengguna log masuk, ketepatan nama pengguna dan kata laluan pertama kali disahkan, dan kemudian token JWT dijana dan dikembalikan ke bahagian hadapan. Bahagian hadapan perlu menghantar token dalam medan Authorization pengepala permintaan dalam permintaan seterusnya.

Dalam antara muka untuk mendapatkan maklumat pengguna, mula-mula kami perlu mengesahkan sama ada token telah tamat tempoh, dan kemudian menghuraikan token untuk mendapatkan nama pengguna dan maklumat peranan. Akhir sekali, maklumat pengguna diperoleh berdasarkan nama pengguna dan dikembalikan ke bahagian hadapan. Jika token tamat tempoh atau gagal dihuraikan, mesej ralat yang sepadan akan dikembalikan.

2. Kuatkan keselamatan kata laluan

Selain menggunakan JWT untuk pengesahan dan kebenaran, kami juga perlu mengukuhkan keselamatan kata laluan. Secara umumnya, kata laluan harus mengikut peraturan berikut:

  1. Panjang tidak kurang daripada 8 aksara
  2. Mengandungi huruf besar dan kecil, nombor dan aksara khas
  3. Elakkan menggunakan kata laluan yang berkaitan dengan nama pengguna, nombor telefon bimbit atau maklumat peribadi yang lain;

Selain itu, untuk mengelakkan kata laluan daripada retak terbalik, kami juga boleh menggunakan algoritma hash untuk menyulitkan kata laluan. Algoritma penyulitan yang biasa digunakan termasuk MD5, SHA-1, SHA-256, dsb., antaranya SHA-256 ialah salah satu daripada algoritma cincang yang digunakan secara meluas pada masa ini.

Berikut ialah contoh kod yang menggunakan algoritma penyulitan SHA-256 untuk menyulitkan kata laluan:

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class PasswordUtils {
    public static String encryptPassword(String password) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] hash = md.digest(password.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

Apabila pengguna melakukan pengesahan kata laluan, kita boleh menggunakan kod di atas untuk menyulitkan kata laluan yang dimasukkan oleh pengguna dan membandingkannya dengan kata laluan disimpan dalam pangkalan data Bandingkan.

Ringkasan:

Artikel ini memperkenalkan cara melaksanakan pensijilan keselamatan untuk pembangunan fungsi back-end Java. Dengan menggunakan JWT untuk melaksanakan pengesahan dan kebenaran, keselamatan akaun pengguna dan data boleh dilindungi. Selain itu, mengukuhkan keselamatan kata laluan juga merupakan langkah yang sangat penting. Saya harap artikel ini dapat membantu pensijilan keselamatan pembangunan back-end Java anda.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pensijilan keselamatan untuk pembangunan fungsi back-end Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn