首页
3D照片墙
统计
留言
Search
1
1.OAuth 的简单理解
118 阅读
2
多个拦截器的执行顺序
107 阅读
3
基于Annotation方式的声明式事务
102 阅读
4
6.设计模式汇总
101 阅读
5
7.关系代数
100 阅读
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
Search
标签搜索
排序算法
vue
算法
遍历
docker
线性
数组
dom
synchronized
数据库
xml语言
log4j
bigint
静态函数
静态方法
哈夫曼树
const
冒泡排序
商标设计
命令模式
Bi8bo
累计撰写
304
篇文章
累计收到
7
条评论
首页
栏目
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
页面
3D照片墙
统计
留言
搜索到
86
篇与
的结果
2023-03-01
1.3自定义一个注解
@interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类 package 注解; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; public class myannotation { } //多个参数的注解 @Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation{ //参数名不是一个方法 //注解的参数: 参数类型+参数名() String name(); //参数的默认值设置 default int age() default 0; String[] school() default {"",""}; } //一个参数的注解 注解如果只有一个参数 ,参数名建议设为value, //这样注解填参数就可以省略参数名 @Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation2{ //注解如果只有一个参数 ,参数名建议设为value,这样注解填参数就可以省略参数名 String value(); }
2023年03月01日
32 阅读
0 评论
28 点赞
2023-02-08
2.3 反射演示Demo
获取一个class对象的几种方式 第一种方式:通过类本身来获得对象 Class classname = this .getClass(); 第二种方式:通过子类的实例获取父类对象 Sub sub = new Sub(); Class clazz = sub.getClass(); Class parentClass = clazz.getSuperclass(); 第三种方式:通过类名(类的全路径)加.class获取对象 Class ForClass = **.**.ClassName.class;(类在包中的路径加.class) 第四种方式:通过类名的字符串获取对象 Class ForName = Class.forName( "**.**.ClassName" ); public class fanse { public static void main(String[] args) throws ClassNotFoundException { // 通过反射获取类的Class对象 //获取一个实体类对象 Class clazz = Class.forName("fanshe.User"); System.out.println(clazz); //一个类在内存中只有一个class对象! //一个类加载后,类的整个结构都会被封装在class对象中 } }
2023年02月08日
69 阅读
0 评论
1 点赞
2023-01-24
一对多
https://www.cnblogs.com/20183544-wangzhengshuai/p/12490894.html
2023年01月24日
52 阅读
0 评论
84 点赞
2023-01-24
基于注解的装配 注入
【Spring】基于注解的装配方式 【Spring】基于注解的装配方式_lucashu的博客-CSDN博客 Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier_彭先森的博客-CSDN博客 @Service 用于标注业务层组件(我们通常定义的service层就用这个) @Controller 用于标注控制层组件(如struts中的action) @Repository 用于标注数据访问组件,即DAO组件 @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 这几个注解是当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个bean,bean名称为XXX; 这几个是基于类的,我们可以定义名称,也可以不定义,不定义会默认以类名为bean的名称(类首字母小写)。 当需要在某个类中定义一个属性,并且该属性是一个已存在的bean,要为该属性赋值我们就用这三个。@Resource、@Autowired、@Qualifier @Repository没有指定bean名称,此时通过属性名去找到底注入哪个bean。 开启注解 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解 配置扫描路径 --> <context:component-scan base-package="com.lucas"/> <!-- 如果有多个路径 ,号隔开 <context:component-scan base-package="com.lucas.service,com.lucas.dao"/>--> </beans>
2023年01月24日
89 阅读
0 评论
34 点赞
2023-01-21
SpringSecurity简单搭建
- 添加 Spring Security 依赖 首先我默认大家都已经了解 Spring Boot 了,在 Spring Boot 项目中添加依赖是非常简单的.把对应的 spring-boot-starter-*** 加到pom.xml 文件中就行了 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 简单的使用 Spring Security 只要配置三个类就完成了,分别是: UserDetails 这个接口中规定了用户的几个必须要有的方法 public interface UserDetails extends Serializable { //返回分配给用户的角色列表 Collection<? extends GrantedAuthority> getAuthorities(); //返回密码 String getPassword(); //返回帐号 String getUsername(); // 账户是否未过期 boolean isAccountNonExpired(); // 账户是否未锁定 boolean isAccountNonLocked(); // 密码是否未过期 boolean isCredentialsNonExpired(); // 账户是否激活 boolean isEnabled(); } UserDetailsService 这个接口只有一个方法 loadUserByUsername,是提供一种用 用户名 查询用户并返回的方法。 public interface UserDetailsService { UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException; } WebSecurityConfigurerAdapter 这个内容很多,就不贴代码了,大家可以自己去看. 我们创建三个类分别继承上述三个接口 此 User 类不是我们的数据库里的用户类,是用来安全服务的. * Created by Yuicon on 2017/5/14. * https://segmentfault.com/u/yuicon */ public class User implements UserDetails { private final String id; //帐号,这里是我数据库里的字段 private final String account; //密码 private final String password; //角色集合 private final Collection<? extends GrantedAuthority> authorities; User(String id, String account, String password, Collection<? extends GrantedAuthority> authorities) { this.id = id; this.account = account; this.password = password; this.authorities = authorities; } //返回分配给用户的角色列表 @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } @JsonIgnore public String getId() { return id; } @JsonIgnore @Override public String getPassword() { return password; } //虽然我数据库里的字段是 `account` ,这里还是要写成 `getUsername()`,因为是继承的接口 @Override public String getUsername() { return account; } // 账户是否未过期 @JsonIgnore @Override public boolean isAccountNonExpired() { return true; } // 账户是否未锁定 @JsonIgnore @Override public boolean isAccountNonLocked() { return true; } // 密码是否未过期 @JsonIgnore @Override public boolean isCredentialsNonExpired() { return true; } // 账户是否激活 @JsonIgnore @Override public boolean isEnabled() { return true; } } 继承 Created by Yuicon on 2017/5/14. https://segmentfault.com/u/yuicon */ @Service public class UserDetailsServiceImpl implements UserDetailsService { // jpa @Autowired private UserRepository userRepository; /** 提供一种从用户名可以查到用户并返回的方法 @param account 帐号 @return UserDetails @throws UsernameNotFoundException */ @Override public UserDetails loadUserByUsername(String account) throws UsernameNotFoundException { // 这里是数据库里的用户类 User user = userRepository.findByAccount(account); if (user == null) { throw new UsernameNotFoundException(String.format(没有该用户 '%s'., account)); } else { //这里返回上面继承了 UserDetails 接口的用户类,为了简单我们写个工厂类 return UserFactory.create(user); } } } UserDetails 工厂类 Created by Yuicon on 2017/5/14. https://segmentfault.com/u/yuicon */ final class UserFactory { private UserFactory() { } static User create(User user) { return new User( user.getId(), user.getAccount(), user.getPassword(), mapToGrantedAuthorities(user.getRoles().stream().map(Role::getName).collect(Collectors.toList())) ); } //将与用户类一对多的角色类的名称集合转换为 GrantedAuthority 集合 private static List<GrantedAuthority> mapToGrantedAuthorities(List<String> authorities) { return authorities.stream() .map(SimpleGrantedAuthority::new) .collect(Collectors.toList()); } } 重点, 继承 WebSecurityConfigurerAdapter 类 Created by Yuicon on 2017/5/14. https://segmentfault.com/u/yuicon */ @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // Spring会自动寻找实现接口的类注入,会找到我们的 UserDetailsServiceImpl 类 @Autowired private UserDetailsService userDetailsService; @Autowired public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { authenticationManagerBuilder // 设置UserDetailsService .userDetailsService(this.userDetailsService) // 使用BCrypt进行密码的hash .passwordEncoder(passwordEncoder()); } // 装载BCrypt密码编码器 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } //允许跨域 @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**).allowedOrigins(*) .allowedMethods(GET, HEAD, POST,PUT, DELETE, OPTIONS) .allowCredentials(false).maxAge(3600); } }; } @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity // 取消csrf .csrf().disable() // 基于token,所以不需要session .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests() .antMatchers(HttpMethod.OPTIONS, /).permitAll() // 允许对于网站静态资源的无授权访问 .antMatchers( HttpMethod.GET, /, /*.html, /favicon.ico, //.html, /**/.css, //*.js, /webjars/, /swagger-resources/, /*/api-docs ).permitAll() // 对于获取token的rest api要允许匿名访问 .antMatchers(/auth/).permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); // 禁用缓存 httpSecurity.headers().cacheControl(); } } 使用 @PreAuthorize("hasRole('ADMIN')") 注解就可以了 /** 在 @PreAuthorize 中我们可以利用内建的 SPEL 表达式:比如 'hasRole()' 来决定哪些用户有权访问。 需注意的一点是 hasRole 表达式认为每个角色名字前都有一个前缀 'ROLE_'。所以这里的 'ADMIN' 其实在 数据库中存储的是 'ROLE_ADMIN' 。这个 @PreAuthorize 可以修饰Controller也可修饰Controller中的方法。 **/ @RestController @RequestMapping(/users) @PreAuthorize(hasRole('USER')) //有ROLE_USER权限的用户可以访问 public class UserController { @Autowired private UserRepository repository; @PreAuthorize(hasRole('ADMIN'))//有ROLE_ADMIN权限的用户可以访问 @RequestMapping(method = RequestMethod.GET) public List<User> getUsers() { return repository.findAll(); } } Spring Boot中 Spring Security 的入门非常简单,很快我们就能有一个满足大部分需求的权限系统了.而配合 Spring Security 的好搭档就是 JWT 了,两者的集成文章网络上也很多,大家可以自行集成.因为篇幅原因有不少代码省略了,需要的可以参考参考项目代码
2023年01月21日
89 阅读
0 评论
47 点赞
1
...
9
10
11
...
18