English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
除了身份验证,Spring Security还检查登录用户的授权。登录后,将根据用户的ROLE完成授权用户访问资源的操作。
在WebSecurityConfig类中创建用户时,我们也可以指定用户的ROLE。
应用于方法的安全性仅限于未经授权的用户,并且仅允许真实用户。
让我们看一个示例。首先,通过提供详细信息创建一个Maven项目。
该项目最初看起来像这样:
现在,配置应用程序以防止未经授权和未经身份验证的用户。它需要下面给出的四个Java文件,创建一个包com.w3codebox并将其放在其中。
//AppConfig.java
此类用于在视图解析器的帮助下设置视图后缀和前缀。
باقة com.w3codebox; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @EnableWebMvc @Configuration @ComponentScan({ "com.w3codebox.controller.*" }) public class AppConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
//MvcWebApplicationInitializer.java.java
باقة com.w3codebox; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override محمية Class<?>[] getRootConfigClasses() { استرداد new Class[] { WebSecurityConfig.class }; } @Override محمية Class<?>[] getServletConfigClasses() { // TOdo Auto-generated method stub استرداد null; } @Override محمية String[] getServletMappings() { استرداد new String[] { "/" }; } }
//SecurityWebApplicationInitializer.java
باقة com.w3codebox; استيراد org.springframework.security.web.context.*; مستخدم عام class SecurityWebApplicationInitializer يتخطى AbstractSecurityWebApplicationInitializer { }
//WebSecurityConfig.java
هذا الكائن يستخدم لإنشاء المستخدمين وإعداد تسجيل الدخول لهم. يجب على المستخدمين دائمًا تسجيل الدخول عند محاولة الوصول إلى هذا التطبيق.
باقة com.w3codebox; استيراد org.springframework.context.annotation.*; استيراد org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; استيراد org.springframework.security.config.annotation.web.builders.HttpSecurity; استيراد org.springframework.security.config.annotation.web.configuration.*; استيراد org.springframework.security.core.userdetails.*; استيراد org.springframework.security.core.userdetails.User.UserBuilder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @EnableWebSecurity @ComponentScan("com.w3codebox") @EnableGlobalMethodSecurity(prePostEnabled=true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public UserDetailsService userDetailsService() { // ensure the passwords are encoded properly UserBuilder users = User.withDefaultPasswordEncoder(); InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(users.username("irfan").password("user123").roles("USER").build()); manager.createUser(users.username("admin").password("admin123").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index","/").permitAll() .antMatchers("/admin","/user").authenticated() .and(); .formLogin()} .and(); .logout(); .logoutRequestMatcher(new AntPathRequestMatcher("/logout")); } }
کنترلر HomeController ایجاد شده و در com.w3codebox.controller در این پکیج.
// HomeController.java
package com.w3codebox.controller; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HomeController { @RequestMapping(value="/", method=RequestMethod.GET) public String index() { return \ } @RequestMapping(value="/user", method=RequestMethod.GET) public String user() { return \ } @RequestMapping(value="/admin", method=RequestMethod.GET) public String admin() { return \ } // فقط، شخصی که نقش ADMIN دارد میتواند به این روش دسترسی داشته باشد. @RequestMapping(value="/update", method=RequestMethod.GET) @ResponseBody @PreAuthorize("hasRole('ROLE_ADMIN')") public String update() { return "updated record "; } }
أنشئ النماذج التالية (صفحات JSP) لإنتاج输出来ً للاستخدام. WEB-INF/views مجلد.
//index.jsp
<html> <head> <title>صفحة البداية</title> </head> <body> مرحبًا بك في w3codebox! <br> <br> الدخول ك: <a href="admin">إدارة</a> <a href="user">المستخدم</a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>صفحة البداية</title> </head> <body> <span style="color: green">نجاح الدخول!</span>؟<a href="logout" style="text-decoration: none;"> تسجيل الخروج</a> <br> <br> <a href="update" style="text-decoration: none;">تحديث السجل</a> </body> </html>
فيما يلي إرتباطات الحاجة لتكوين هذا المشروع.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.w3codebox</groupId> <artifactId>springmethod</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
بعد إضافة جميع الملفات المذكورة أعلاه، سيكون شكل مشروعنا كالتالي:
الإخراج:
الدخول لأول مرة كمستخدم ADMIN
بعد الدخول،
انقر تحديث السجلات، ثم راقب ما إذا تم تحديث السجلات أم لا، لأن دور المستخدم هو ADMIN.
الآن، قم بالدخول كمستخدم.
الآن، انقر تحديث السجلات، لأن دور المستخدم هو USER، يرفض الخادم الوصول.