讲讲 springboot 框架
时间: 2024-07-18 12:01:37 浏览: 68
Spring Boot是一个开源框架,由Spring团队开发,它简化了构建基于Spring的应用程序的过程。Spring Boot的核心理念是“一键启动”,通过自动配置和约定优于配置的原则,减少了开发者需要手动配置的繁琐工作,使得新项目的快速搭建变得非常容易。
以下是Spring Boot的一些关键特性:
1. **快速启动**:通过内嵌Tomcat或其他容器,可以立即运行应用而无需额外的部署步骤。
2. **自动配置**:Spring Boot会尝试根据已添加的依赖库自动配置所需的组件,比如数据源、Web服务等。
3. **命令行界面(Actuator)**:提供了一组健康检查、监控和管理工具,如端点文档、日志展示和应用程序信息。
4. **轻量级启动**:适合小型到中型项目,避免了引入大量不必要的组件。
5. **Maven/Gradle集成良好**:支持便捷的构建流程,通过starter模块快速引入所需功能。
相关问题
讲一讲springboot
Spring Boot是一个基于Spring Framework的快速开发框架,它可以让开发者快速构建可独立运行的、生产级别的应用程序。Spring Boot提供了一系列自动配置的依赖项和约定,使得开发者可以非常方便地构建Web应用程序、RESTful服务、消息队列、数据处理等应用。
Spring Boot的核心思想是“约定大于配置”,它通过自动配置和约定俗成的方式来减少开发者的配置量,从而提高开发效率。同时,Spring Boot也提供了大量的扩展点和自定义配置选项,使得开发者可以在需要的时候进行定制化开发。
Spring Boot还提供了一套丰富的开发工具和插件,以简化应用程序的构建和部署过程。例如,Spring Boot可以很容易地将应用程序打包为可执行的JAR文件,并且可以内嵌Tomcat、Jetty等Web容器,从而实现一键启动应用程序的目的。
总之,Spring Boot是一个非常好用的开发框架,它可以大大提高开发效率,降低开发成本。如果你想快速构建可独立运行的Web应用程序或RESTful服务,那么Spring Boot是一个非常不错的选择。
讲一讲SpringBoot整合shiro框架实现登录认证的流程及原理
SpringBoot整合shiro框架实现登录认证的流程及原理可以分为以下步骤:
1. 引入shiro和web依赖
在pom.xml中引入shiro和web依赖,如下所示:
```xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
2. 配置shiro
在application.properties文件中配置shiro相关属性,如下所示:
```properties
# shiro配置
# 加密算法
shiro.hashAlgorithmName=md5
# 加密次数
shiro.hashIterations=2
# shiro缓存
shiro.cacheManager=org.apache.shiro.cache.MemoryConstrainedCacheManager
```
3. 自定义Realm
实现自定义Realm,继承org.apache.shiro.realm.AuthorizingRealm类,重写doGetAuthorizationInfo和doGetAuthenticationInfo方法,分别用于授权和认证。
```java
public class CustomRealm extends AuthorizingRealm {
@Autowired
private UserService userService;
/**
* 授权
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
/**
* 认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
String username = usernamePasswordToken.getUsername();
User user = userService.findByUsername(username);
if (user == null) {
throw new UnknownAccountException("用户名不存在");
}
String password = new String(usernamePasswordToken.getPassword());
String salt = user.getSalt();
String hashedPassword = new SimpleHash("md5", password, salt, 2).toString();
if (!user.getPassword().equals(hashedPassword)) {
throw new IncorrectCredentialsException("密码错误");
}
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, user.getPassword(), getName());
return authenticationInfo;
}
}
```
4. 配置shiroFilterFactoryBean
在配置类中配置shiroFilterFactoryBean,用于拦截请求,并进行认证和授权。
```java
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
filterFactoryBean.setSecurityManager(securityManager);
filterFactoryBean.setLoginUrl("/login");
filterFactoryBean.setUnauthorizedUrl("/unauthorized");
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authc");
filterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return filterFactoryBean;
}
```
5. 配置securityManager
在配置类中配置securityManager,将自定义Realm添加到securityManager中。
```java
@Bean
public DefaultWebSecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(customRealm());
return securityManager;
}
```
6. 配置shiro的注解支持
在配置类中配置shiro的注解支持,用于在Controller中使用@RequiresRoles和@RequiresPermissions注解。
```java
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
advisor.setSecurityManager(securityManager);
return advisor;
}
```
7. 编写Controller
编写Controller,用于处理登录请求。
```java
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String doLogin(String username, String password) {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try {
subject.login(token);
return "redirect:/index";
} catch (UnknownAccountException e) {
return "login";
} catch (IncorrectCredentialsException e) {
return "login";
}
}
@GetMapping("/logout")
public String logout() {
Subject subject = SecurityUtils.getSubject();
subject.logout();
return "redirect:/login";
}
@GetMapping("/unauthorized")
public String unauthorized() {
return "unauthorized";
}
}
```
以上就是SpringBoot整合shiro框架实现登录认证的流程及原理。