`
somefuture
  • 浏览: 1089766 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring Secure在SpringBoot中的集成

 
阅读更多

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,因此插入用户的时候也要这样加密密码。

 

 

2
3
分享到:
评论
1 楼 acg6567 2016-08-30  
请问,对于自定义的登录页面,我的ajax请求方式该怎么写呢,是不是需要配置passwordParameter和usernameParameter,还有loginProcessingUrl这个不是登录成功后跳转的请求吗,为什么需要它和action的值一样呢,对于前后端分离的项目,自定义的登录页面action或者ajax应该怎么写呢,网上相关资料实在太少,望回答。

相关推荐

    Springboot-LDAP针对AD域控做用户和组织进行同步.zip

    在“Springboot-LDAP针对AD域控做用户和组织进行同步”的场景中,开发人员会创建一个Spring Boot应用,配置LDAP连接参数(如服务器地址、端口、基础DN等),并设置LDAP数据源。通过Spring Security的`...

    采用Websocket实现的单设备登录的SpringBoot的后端部分

    这可以通过在`pom.xml`文件中添加`spring-boot-starter-websocket`依赖来完成。 2. **配置WebSocket端点**: 使用SpringBoot的`@ServerEndpoint`注解定义WebSocket端点。这个端点将处理客户端的连接请求和断开连接的...

    java-http2-springboot-gradle

    本项目"java-http2-springboot-gradle"显然关注于如何在Spring Boot应用中启用HTTP/2,并使用Gradle作为构建工具。以下是对该项目涉及知识点的详细解释: 1. **HTTP/2协议**:HTTP/2是HTTP协议的升级版本,相比...

    spring boot+mybatis 项目 调用网络摄像头,进行录像(以华为摄像头为例子,可以使用多种网络摄像头)

    在本项目中,我们主要探讨如何使用Spring Boot和MyBatis框架来调用网络摄像头进行录像,以华为摄像头为例,并且实现将录制的视频通过SFTP协议上传到远程服务器进行存储。以下是对该项目涉及的技术点的详细说明: 1....

    SpringBoot控制器统一的响应体编码/加密与请求体解密的注解处理方式,支持MD5/SHA/AES/DES/RSA

    在SpringBoot应用中,我们经常需要处理数据的安全性,包括对控制器返回的响应体进行编码或加密,以及对接收到的请求体进行解密。这样的需求可以通过自定义注解和处理器来实现,支持多种常见的加密算法,如MD5、SHA、...

    springboot Guacamole vnc远程与录屏播放

    本教程将重点介绍如何使用SpringBoot集成Guacamole实现VNC远程连接和录屏播放。 首先,我们需要创建一个SpringBoot项目。这通常涉及以下步骤: 1. **创建项目结构**:使用Spring Initializr ...

    spring boot https (1.0和2.0)

    - **Spring Boot 2.0**:在Spring Boot 2.0中,配置方式基本保持不变,但增加了更多灵活性。除了基本的`server.ssl.*`属性,还可以使用`server.ssl.client-auth`来设置客户端认证,以及`server.ssl.ciphers`来指定...

    基于Springboot 版本 2.3.2.RELEASE版本开发的Example

    Example涵盖内容: 4种日志框架详解:Logback、Log4j、Log4j2和Slf4j,基于secure-ext-spring-boot-starter日志记录脱敏,spring-session基于redis存储session,集成MyBatis以及mybatis-plus3的应用实践,安全认证-...

    spring cxf 开发包

    在这个"spring cxf 开发包"中,包含的主要是Apache CXF的相关组件和开发所需的jar包,以及可能的示例代码(demo),这些都是为了帮助开发者快速地在平台上进行Web服务的开发。 首先,Apache CXF的核心组件包括: 1....

    springboot+vue基于springboot+vue的房屋交易平台的设计与实现java毕业论文.doc

    SpringBoot集成了MySql数据库,提供了稳定的数据存储和备份机制,确保了数据的安全性和可靠性。同时,SpringBoot的自动配置特性减少了开发工作量,提升了开发效率。 Vue.js在前端部分负责用户交互和界面展示,通过...

    scheduled-download-csv-master_SpringBoo_读取文件_sftp_

    在这个特定的项目"scheduled-download-csv-master_SpringBoot_读取文件_sftp_"中,我们看到一个利用Spring Boot实现的功能,即定时从Linux服务器通过SFTP(Secure File Transfer Protocol)协议下载.csv文件,然后...

    基于webrtc开发的多人视频会议

    在这个多人视频会议系统中,SpringBoot作为后端框架,负责处理与WebSocket服务器相关的业务逻辑,如用户的登录验证、会议创建和加入、媒体流的管理等。 4. **MCU(Multipoint Control Unit)**:在多人视频会议中,...

    实现简单即时通讯聊天系统、spring boot + mvc + mybatis + netty-sokey.io.zip

    标签中的"ssh"可能指的是Secure Shell,但在上下文中更可能是Spring Security的误写,Spring Security是Spring的权限控制组件,用于实现用户认证和授权。在这个聊天系统中,Spring Security可以确保只有合法的用户...

    基于Springboot websocket + js实现的即时聊天系统.zip

    在本项目"基于Springboot websocket + js实现的即时聊天系统.zip"中,开发者采用Spring Boot框架结合WebSocket协议和JavaScript技术,构建了一个实时通信的聊天应用。这个系统允许用户之间进行实时的消息传递,提供...

    基于vue与springboot的sftp远端服务器文件管理系统

    【标题】"基于vue与springboot的sftp远端服务器文件管理系统"是一个融合了前端Vue.js框架和后端Spring Boot技术的项目,旨在实现对SFTP(Secure File Transfer Protocol)服务器上的文件进行管理的功能。这样的系统...

    Spring Boot2集成AOPLog来记录接口访问日志

    本文主要介绍了如何在Spring Boot 2项目中集成AOPLog,从而实现接口访问日志的记录。使用AOPLog记录接口访问日志可以减少代码冗余,提高开发效率,并且通过AOP的方式将日志记录从业务逻辑中解耦出来,使得代码更加...

    sringboot项目自动化发布shell脚本

    在IT行业中,Spring Boot是一个非常流行的Java框架,它简化了创建独立、生产级的Spring应用程序。而自动化发布是持续集成和持续部署(CI/CD)流程的重要组成部分,它能够节省时间,减少人为错误,提高软件交付效率。...

    自动上传运行spring boot项目.zip

    这一步可能涉及到使用SSH(Secure SHell)协议连接到远程服务器,并使用像是`scp`或`rsync`命令来传输文件,以及`nohup`或`screen`命令来后台运行JAR包,确保服务即使在终端关闭后也能持续运行。 4. **配置插件...

    基于springboot+vue的早餐店点餐系统源码数据库论文.doc

    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....

    springboot https 配置

    在Spring Boot中,你需要在`application.yml`或`application.properties`配置文件中指定Keystore的相关信息,例如: ```yaml server: port: 8443 # 使用默认的HTTPS端口 ssl: enabled: true key-store: ...

Global site tag (gtag.js) - Google Analytics