内容简介:Spring Initializr让我们快速设置一个简单的Web应用程序,以确保使用Spring Security。我们将创建一个Controller,它将重定向到欢迎视图 - 一个简单的jsp。我们希望使用JSP作为视图。Spring Boot Starter Web的默认嵌入式servlet容器是tomcat。要启用对JSP的支持,我们需要在tomcat-embed-jasper上添加依赖项。
Spring Initializr http://start.spring.io/ 是引导Spring Boot项目的绝佳工具。我们使用它创建我们的案例:
-
启动Spring Initializr并选择以下内容
-
选择
com.samples.springboot
为组 -
选择
student-services
为神器 -
选择以下依赖项
- 卷筒纸
-
选择
- 单击“生成项目”。
- 将项目导入Eclipse。
- 如果您想了解属于该项目的所有文件,可以访问此处。
设置简单的Web应用程序
让我们快速设置一个简单的Web应用程序,以确保使用Spring Security。我们将创建一个Controller,它将重定向到欢迎视图 - 一个简单的jsp。
JSP支持
我们希望使用JSP作为视图。Spring Boot Starter Web的默认嵌入式servlet容器是tomcat。要启用对JSP的支持,我们需要在tomcat-embed-jasper上添加依赖项。
<dependency><font></font> <groupId>org.apache.tomcat.embed</groupId><font></font> <artifactId>tomcat-embed-jasper</artifactId><font></font> <scope>provided</scope><font></font> </dependency><font></font>
添加登录控制器
LoginController将根URL“/”映射到showLoginPage方法。硬编码名称将填充到模型中。它返回一个映射到welcome.jsp的视图名称“welcome”。
package com.samples.springboot.web.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class LoginController { @RequestMapping(value = "/", method = RequestMethod.GET) public String showLoginPage(ModelMap model) { model.put("name", "samples"); return "welcome"; } }
添加welcome.jsp
welcome.jsp是一个简单的jsp,带有欢迎消息。
<div class="container"> Welcome ${name}!! </div>
配置视图解析器
欢迎jsp在文件夹src / main / webapp / WEB-INF / jsp /中。我们将在application.properties中配置一个视图解析器,以将视图名称映射到物理jsp
spring.mvc.view.prefix=/WEB-INF/jsp/<font></font> spring.mvc.view.suffix=.jsp<font></font>
运行Web应用程序
将StudentServicesApplication作为 java 应用程序启动。以下屏幕截图显示了在http:// localhost:8080上启动的应用程序。
添加简单REST服务
让我们也添加一个简单的REST服务。我们将补充
- 两个模型对象 - 课程和学生。学生可以注册多门课程。
- 一个业务服务 - 管理业务逻辑。我们使用的大多数业务逻辑都位于存储在静态ArrayList中的硬编码数据之上。
- 一个休息控制器 - StudentController。公开一个休息服务以检索学生注册的课程列表。
模型和业务逻辑
下面的代码段显示了模型对象Course和Student的摘录。
public class Course { private String id; private String name; private String description; private List<String> steps; }
public class Student { private String id; private String name; private String description; private List<Course> courses; }
StudentService提供了一种 public List<Course> retrieveCourses(String studentId)
检索学生注册课程的方法。
@Component public class StudentService { private static List<Student> students = new ArrayList<>(); static { // Initialize Data Course course1 = new Course("Course1", "Spring", "10 Steps", Arrays.asList("Learn Maven", "Import Project", "First Example", "Second Example")); Course course2 = new Course("Course2", "Spring MVC", "10 Examples", Arrays.asList("Learn Maven", "Import Project", "First Example", "Second Example")); Student ranga = new Student("Student1", "Ranga Karanam", "Hiker, Programmer and Architect", new ArrayList<>( Arrays.asList(course1, course2))); students.add(ranga); } public Student retrieveStudent(String studentId) { for (Student student : students) { if (student.getId().equals(studentId)) { return student; } } return null; } public List<Course> retrieveCourses(String studentId) { Student student = retrieveStudent(studentId); if (student == null) { return null; } return student.getCourses(); } }
创建REST服务
Rest Service StudentController
在URI映射“/ students / {studentId} / courses”中公开了一个简单的Get服务。它 StudentService
是自动连接的。
package com.samples.springboot.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import com.samples.springboot.model.Course; import com.samples.springboot.service.StudentService; @RestController public class StudentController { @Autowired private StudentService studentService; @GetMapping("/students/{studentId}/courses") public List<Course> retrieveCoursesForStudent(@PathVariable String studentId) { return studentService.retrieveCourses(studentId); } }
执行REST服务
执行休息服务很容易。在您的浏览器或您最喜爱的休息客户端中访问URL http:// localhost:8080 / students / Student1 / courses。
添加Spring Boot Starter Security
现在让我们将Spring Boot Starter Security添加为该项目的依赖项。
<dependency><font></font> <groupId>org.springframework.boot</groupId><font></font> <artifactId>spring-boot-starter-security</artifactId><font></font> </dependency><font></font> <font></font>
自动配置
当我们重新启动应用程序时,我们会在日志中看到以下语句。
Mapping filter: 'springSecurityFilterChain' to: [/*]<font></font> <font></font> Using default security password: 25e07e82-720d-4109-ba8d-25177c6347e6<font></font> <font></font> Creating filter chain:<font></font> ...<font></font> ...<font></font> <font></font>
所有这些魔力都是因为自动配置:
-
Mapping filter: 'springSecurityFilterChain' to: [/*]
:默认情况下,为应用程序中的所有URL启用Spring Security。 - 基本身份验证是默认设置。
-
Using default security password: 25e07e82-720d-4109-ba8d-25177c6347e6
:默认用户标识是用户。默认密码打印在服务器启动日志中。在此示例中,密码为25e07e82-720d-4109-ba8d-25177c6347e6 - 某些过滤器链配置为启用安全性
执行REST服务
当我们现在在http:// localhost:8080 / students / Student1 / courses执行Rest Service时,它会返回身份验证失败。状态为401,消息“Bad credentials”。这是因为我们的服务现在受到Spring Security的保护。
{ "timestamp": 1485768623632, "status": 401, "error": "Unauthorized", "message": "Bad credentials", "path": "/students/Student1/courses" }
使用基本身份验证执行Rest服务
通过搜索从日志中获取密码 Using default security password:
。用户标识是用户。使用此组合可使用基本身份验证执行服务。
运行Web应用程序
当您在浏览器中启动URL http:// localhost:8080时,会弹出一个要求输入用户名和密码的弹出窗口。您需要输入我们为REST服务提供的相同详细信息。
通过添加一个简单的依赖Spring Boot Starter Security,我们开启了很多魔术。
配置自定义用户和角色
我们现在配置自定义用户和角色
- 我们将使用Admin和User两个角色。管理员角色可以访问Web应用程序,用户角色可以访问执行REST服务。
- 我们将使用凭据admin1 / secret1为Admin角色创建一个用户
- 我们将使用凭据user1 / secret1为User角色创建一个用户
package com.samples.springboot.security; @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { // Authentication : User --> Roles protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().passwordEncoder(or g.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance()). withUser("user1") .password("secret1") .roles("USER").and().withUser("admin1").password("secret1") .roles("USER", "ADMIN"); } // Authorization : Role -> Access protected void configure(HttpSecurity http) throws Exception { http.httpBasic().and().authorizeRequests().antMatchers("/students/**") .hasRole("USER").antMatchers("/**").hasRole("ADMIN").and() .csrf().disable().headers().frameOptions().disable(); } }
执行REST服务
现在我们可以使用user1 / secret1组合来执行休息服务。
启动Web应用程序
我们需要在弹出窗口中使用admin1 / secret1组合来启动Web应用程序。
Spring Boot
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 如何使用PostgreSQL加密密码?
- 使用 Go 语言实现凯撒加密
- 浅谈iOS中常用加密算法的使用
- golang crypt包的AES加密函数的使用
- C#如何使用PGP公钥简单加密文本文件?
- 寻找活动目录中使用可逆加密存储密码的账户
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员代码面试指南:IT名企算法与数据结构题目最优解
左程云 / 电子工业出版社 / 2015-9 / 79.00元
这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联......一起来看看 《程序员代码面试指南:IT名企算法与数据结构题目最优解》 这本书的介绍吧!