讲一讲springboot
时间: 2023-10-14 12:03:34 浏览: 82
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自动装配的原理
Spring Boot的自动装配是通过条件注解和Spring Boot的自动配置机制实现的。
首先,Spring Boot使用了条件注解来根据一定的条件判断是否需要自动装配某个组件。条件注解可以通过在类上添加`@Conditional`注解来实现。例如,`@ConditionalOnClass`注解表示当指定的类存在于Classpath中时才会自动装配该组件。
其次,Spring Boot利用了Spring的`@EnableAutoConfiguration`注解来开启自动配置机制。这个注解会导入`AutoConfigurationImportSelector`类,它是一个实现了`ImportSelector`接口的选择器。通过`AutoConfigurationImportSelector`,Spring Boot会根据一些约定和条件,自动加载并配置相应的Spring Bean。
在自动装配过程中,Spring Boot会根据一系列的规则和条件,从Classpath中的META-INF/spring.factories文件中读取自动配置类,并根据这些类的配置信息来创建相应的Bean。自动配置类通常使用`@Configuration`注解进行标注,并在类上使用`@AutoConfigureAfter`或`@AutoConfigureBefore`注解指定自动配置的顺序。
另外,Spring Boot还提供了一些自定义配置属性,可以通过在application.properties或application.yml文件中设置这些属性来自定义自动配置的行为。
总结起来,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框架实现登录认证的流程及原理。
阅读全文