Gunakan Apache Shiro untuk kawalan kebenaran dalam pembangunan API Java
Dengan perkembangan teknologi Internet, semakin banyak aplikasi menggunakan seni bina berasaskan API. Untuk seni bina ini, data atau perkhidmatan didedahkan kepada sistem atau aplikasi luaran dalam bentuk API. Dalam kes ini, kawalan kebenaran pengguna adalah sangat penting. Artikel ini terutamanya memperkenalkan cara menggunakan Apache Shiro untuk mengurus isu kebenaran dalam Java API.
Ikhtisar Apache Shiro
Apache Shiro ialah rangka kerja sumber terbuka daripada Yayasan Perisian Apache yang menyediakan fungsi asas seperti pengesahan keselamatan, kebenaran, pengurusan kata laluan dan pengurusan sesi dalam aplikasi. Apache Shiro ialah rangka kerja keselamatan yang ringkas dan mudah digunakan yang membolehkan pembangun Java menumpukan pada logik perniagaan tanpa perlu risau tentang isu keselamatan.
Komponen utama Apache Shiro termasuk:
Berdasarkan komponen di atas, Shiro menyediakan rangka kerja keselamatan lengkap yang boleh digunakan untuk membangunkan modul keselamatan dalam aplikasi Java.
Gunakan Apache Shiro untuk kawalan kebenaran
Dalam proses membangunkan API Java, selalunya perlu untuk mengawal kebenaran pengguna Shiro menyediakan penyelesaian yang fleksibel dan diperkemas untuk melaksanakan fungsi ini. Kaedah pelaksanaan khusus diperkenalkan di bawah:
Pertama, anda perlu menambah pakej pergantungan Shiro yang berkaitan pada projek. Sebagai contoh, dalam projek Maven, anda boleh menambah kod berikut dalam Kebenaran pom dan data lain yang berkaitan, dan menyepadukannya dengan rangka kerja Shiro. Oleh itu, mentakrifkan kelas Realm ialah langkah pertama untuk kawalan kebenaran.
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.5.3</version> </dependency>
Dalam API Java, kami boleh mengkonfigurasi Penapis Shiro untuk memintas permintaan dan mengawal kebenaran pengguna. Penapis Shiro ialah penapis Servlet yang boleh digunakan untuk penapisan kebenaran, pengurusan sesi, dll. dalam aplikasi web.
public class MyRealm extends AuthorizingRealm { // 根据用户名获取用户即其角色、权限等相关信息 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { // 获取当前用户的身份信息 String username = (String) principalCollection.getPrimaryPrincipal(); // 从数据库中查询用户及其角色 User user = userService.loadByUsername(username); List<Role> roles = roleService.getRolesByUsername(username); // 添加角色 List<String> roleNames = new ArrayList<>(); for (Role role : roles) { roleNames.add(role.getName()); } SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.addRoles(roleNames); // 添加权限 List<String> permissionNames = new ArrayList<>(); for (Role role : roles) { List<Permission> permissions = permissionService.getPermissionsByRoleId(role.getId()); for (Permission permission : permissions) { permissionNames.add(permission.getName()); } } info.addStringPermissions(permissionNames); return info; } // 根据用户名和密码验证用户 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { // 获取用户提交的身份信息 String username = (String) authenticationToken.getPrincipal(); String password = new String((char[]) authenticationToken.getCredentials()); // 根据用户名查询用户 User user = userService.loadByUsername(username); if (user == null) { throw new UnknownAccountException(); } // 验证用户密码 String encodedPassword = hashService.hash(password, user.getSalt()); if (!user.getPassword().equals(encodedPassword)) { throw new IncorrectCredentialsException(); } // 如果验证成功,则返回一个身份信息 SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, password, getName()); return info; } }
Selepas melengkapkan langkah di atas, kami boleh menggunakan Shiro untuk kawalan kebenaran dalam Java API. Dalam pelaksanaan khusus, kita boleh menggunakan kelas Subjek yang disediakan oleh Shiro untuk mewakili pengguna semasa. Kita boleh menyemak sama ada pengguna mempunyai peranan atau kebenaran tertentu melalui hasRole(), isPermitted() dan kaedah lain kelas ini. Berikut ialah contoh:
@Configuration public class ShiroConfig { @Bean public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); // 设置登录URL shiroFilter.setLoginUrl("/login"); // 设置无权访问的URL shiroFilter.setUnauthorizedUrl("/unauthorized"); // 配置拦截器规则 Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/home", "authc"); filterChainDefinitionMap.put("/admin/**", "roles[admin]"); filterChainDefinitionMap.put("/**", "authc"); shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilter; } @Bean public SecurityManager securityManager(MyRealm myRealm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myRealm); return securityManager; } @Bean public MyRealm myRealm(HashService hashService, UserService userService, RoleService roleService, PermissionService permissionService) { return new MyRealm(userService, roleService, permissionService, hashService); } @Bean public HashService hashService() { return new SimpleHashService(); } }
Kawalan kebenaran ialah isu yang sangat penting dalam pembangunan API Java. Apache Shiro menyediakan rangka kerja keselamatan yang mudah dan mudah digunakan yang boleh membantu pembangun Java dengan cepat melaksanakan pengesahan pengguna, kebenaran, pengurusan kata laluan, pengurusan sesi dan fungsi lain. Melalui pengenalan artikel ini, saya berharap pembaca dapat memahami dengan jelas cara menggunakan Shiro untuk melaksanakan fungsi kawalan kebenaran dalam pembangunan API Java.
Atas ialah kandungan terperinci Menggunakan Apache Shiro untuk kawalan kebenaran dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!