Spring Secure4在使用上和Secure3差别不大,基本上怎么使用3就可以怎么使用4。而且4也是推荐使用命名空间进行配置,不过由于SpringBoot推荐不使用xml配置,所以我们这里说的都是不使用xml的。sprngboot默认引入的是3,4也类似。
要在项目中通过maven引入spring secure有两种方式,如果使用springboot的starter是这样的:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
也可以直接使用secure的引入方式:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> </dependency>
现在的springboot会把Secure3.2.8引过来。
接下来开始进行配置,只需要新建一个类即可:
@EnableGlobalMethodSecurity(prePostEnabled = true) @Configuration @EnableWebMvcSecurity public class WebAuthConfiguration extends WebSecurityConfigurerAdapter {}
这里我把这个类命名为webauthconfiguration,它需要继承自org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter。
然后给这个类添加Configuration注解,来让springboot启动的时候加载该配置。然后加上enablewebmvcsecurity注解启动secure配置。至于enableglobalmethodsecurity注解加不加都可以,开启方法级别配置的。
到现在secure就添加好了而且可以正常工作,但是使用的是默认配置:
protected void configure(HttpSecurity http) throws Exception { logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity)."); http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin().and() .httpBasic(); }
默认配置说所有的请求都需要进行安全认证,登陆使用默认的form表单(会弹出一个可怕的登陆框),并使用http Basic 认证,就是通过密码和角色。
我们重新这个方法,并根据自己的需要增加配置:
http.authorizeRequests().antMatchers("/assets/", "/").permitAll() .anyRequest().authenticated() .and().formLogin().usernameParameter("username").passwordParameter("password").loginProcessingUrl("/login").loginPage("/login") .and().logout().permitAll().logoutUrl("/logout").logoutSuccessUrl("/login") .logoutSuccessHandler(logoutSuccessHandler) .invalidateHttpSession(true).addLogoutHandler(logoutHandler).deleteCookies(new String[] { "cookie名字" }) .and().rememberMe();
第一行是说访问/和匹配/assets/**模式的url都可以直接访问,下面说其他的需要认证。使用form表单登录,为什么要指定这个呢?因为spring会从请求中查找username和password域参数。从哪个请求中呢?默认是/login,可以通过login(String s)自定义。表单提交的参数也可以通过usernameParameter()和passwordParamter()自定义。如果不使用默认的弹出框而使用自己的页面,表单的action必须和loginProcessingUrl()指定的一样,当然也需要是post方式。
再往下是允许spring控制登出。默认访问/logout会执行登出,spring会使session无效,并清理rememberMe生成的cookie。logoutUrl()可以自定义登出的url,成功登出后的跳转url由logoutSuccessUrl()指定,默认是/login?logout,你可以这个页面判断有Logout参数就提示用户登出成功。
再往后配置自动登录,使用rememberMe()方法。自动登录有两种方法,一个是由org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices类配置,另一个由org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices配置,差别是用不用数据库。
登录认证需要在这个类中新建一个autowired方法configureGlobal(auth):
@Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource) .usersByUsernameQuery("select username,password, enabled from users where username=?") .authoritiesByUsernameQuery("select username, role from user_roles where username=?"); }
有四种方法,第一种使用内存配置,就是直接使用常量串,我感觉用的很少;第二种是上面这段代码用的jdbc方式,第三种是ldap方式;第四种是使用userDetailsService:
@Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); auth.eraseCredentials(false).userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); }
因为需要自动登录,就把eraseCredentials设为false。
到现在为止,就把登录认证包括自动登录和url访问认证以及登出配好了。可以往数据库加入一个用户试一下,刚才看到登录的时候使用了passwordEncoder,因此插入用户的时候也要这样加密密码。
相关推荐
在“Springboot-LDAP针对AD域控做用户和组织进行同步”的场景中,开发人员会创建一个Spring Boot应用,配置LDAP连接参数(如服务器地址、端口、基础DN等),并设置LDAP数据源。通过Spring Security的`...
这可以通过在`pom.xml`文件中添加`spring-boot-starter-websocket`依赖来完成。 2. **配置WebSocket端点**: 使用SpringBoot的`@ServerEndpoint`注解定义WebSocket端点。这个端点将处理客户端的连接请求和断开连接的...
本项目"java-http2-springboot-gradle"显然关注于如何在Spring Boot应用中启用HTTP/2,并使用Gradle作为构建工具。以下是对该项目涉及知识点的详细解释: 1. **HTTP/2协议**:HTTP/2是HTTP协议的升级版本,相比...
在本项目中,我们主要探讨如何使用Spring Boot和MyBatis框架来调用网络摄像头进行录像,以华为摄像头为例,并且实现将录制的视频通过SFTP协议上传到远程服务器进行存储。以下是对该项目涉及的技术点的详细说明: 1....
在SpringBoot应用中,我们经常需要处理数据的安全性,包括对控制器返回的响应体进行编码或加密,以及对接收到的请求体进行解密。这样的需求可以通过自定义注解和处理器来实现,支持多种常见的加密算法,如MD5、SHA、...
本教程将重点介绍如何使用SpringBoot集成Guacamole实现VNC远程连接和录屏播放。 首先,我们需要创建一个SpringBoot项目。这通常涉及以下步骤: 1. **创建项目结构**:使用Spring Initializr ...
- **Spring Boot 2.0**:在Spring Boot 2.0中,配置方式基本保持不变,但增加了更多灵活性。除了基本的`server.ssl.*`属性,还可以使用`server.ssl.client-auth`来设置客户端认证,以及`server.ssl.ciphers`来指定...
Example涵盖内容: 4种日志框架详解:Logback、Log4j、Log4j2和Slf4j,基于secure-ext-spring-boot-starter日志记录脱敏,spring-session基于redis存储session,集成MyBatis以及mybatis-plus3的应用实践,安全认证-...
在这个"spring cxf 开发包"中,包含的主要是Apache CXF的相关组件和开发所需的jar包,以及可能的示例代码(demo),这些都是为了帮助开发者快速地在平台上进行Web服务的开发。 首先,Apache CXF的核心组件包括: 1....
SpringBoot集成了MySql数据库,提供了稳定的数据存储和备份机制,确保了数据的安全性和可靠性。同时,SpringBoot的自动配置特性减少了开发工作量,提升了开发效率。 Vue.js在前端部分负责用户交互和界面展示,通过...
在这个特定的项目"scheduled-download-csv-master_SpringBoot_读取文件_sftp_"中,我们看到一个利用Spring Boot实现的功能,即定时从Linux服务器通过SFTP(Secure File Transfer Protocol)协议下载.csv文件,然后...
在这个多人视频会议系统中,SpringBoot作为后端框架,负责处理与WebSocket服务器相关的业务逻辑,如用户的登录验证、会议创建和加入、媒体流的管理等。 4. **MCU(Multipoint Control Unit)**:在多人视频会议中,...
标签中的"ssh"可能指的是Secure Shell,但在上下文中更可能是Spring Security的误写,Spring Security是Spring的权限控制组件,用于实现用户认证和授权。在这个聊天系统中,Spring Security可以确保只有合法的用户...
在本项目"基于Springboot websocket + js实现的即时聊天系统.zip"中,开发者采用Spring Boot框架结合WebSocket协议和JavaScript技术,构建了一个实时通信的聊天应用。这个系统允许用户之间进行实时的消息传递,提供...
【标题】"基于vue与springboot的sftp远端服务器文件管理系统"是一个融合了前端Vue.js框架和后端Spring Boot技术的项目,旨在实现对SFTP(Secure File Transfer Protocol)服务器上的文件进行管理的功能。这样的系统...
本文主要介绍了如何在Spring Boot 2项目中集成AOPLog,从而实现接口访问日志的记录。使用AOPLog记录接口访问日志可以减少代码冗余,提高开发效率,并且通过AOP的方式将日志记录从业务逻辑中解耦出来,使得代码更加...
在IT行业中,Spring Boot是一个非常流行的Java框架,它简化了创建独立、生产级的Spring应用程序。而自动化发布是持续集成和持续部署(CI/CD)流程的重要组成部分,它能够节省时间,减少人为错误,提高软件交付效率。...
这一步可能涉及到使用SSH(Secure SHell)协议连接到远程服务器,并使用像是`scp`或`rsync`命令来传输文件,以及`nohup`或`screen`命令来后台运行JAR包,确保服务即使在终端关闭后也能持续运行。 4. **配置插件...
SpringBoot, a microservice-oriented framework built on top of Spring, is utilized for handling server-side logic, managing APIs, and providing authentication and authorization functionalities....
在Spring Boot中,你需要在`application.yml`或`application.properties`配置文件中指定Keystore的相关信息,例如: ```yaml server: port: 8443 # 使用默认的HTTPS端口 ssl: enabled: true key-store: ...