`
NeverFlyAway
  • 浏览: 69509 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Spring Security的配置

 
阅读更多

使用和配置spring security,一个基本的权限管理模块

 

引入这两个包,版本自选,目前是2.5

 

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>${springSecuroty.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>${springSecuroty.version}</version>
		</dependency>

 

 

新建一个class,目的是配置启动web app时加载spring security

因为是简单配置,所以没有重写里面的任何方法,实际项目中可以根据需求重写里面的方法

 

package com.demo.config.spring;

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

@Order(Ordered.HIGHEST_PRECEDENCE)
public class SecurityInit extends AbstractSecurityWebApplicationInitializer {

}

 

 

具体的spring security权限配置

用户名和密码读取数据库进行鉴权的配置

如下:

 

package com.demo.config.spring;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Autowired
	private DataSource dataSourceMySQL;

	@Autowired
	public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
		auth
			.jdbcAuthentication()
			.dataSource(dataSourceMySQL)
			.usersByUsernameQuery(this.getUserQuery())
			.authoritiesByUsernameQuery(this.getAuthoritiesQuery());
	}

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		
		http
			.csrf() //防止csrf
				.disable()
			.authorizeRequests() //css js的目录设为不需要验证
				.antMatchers("/resources/**")
				.permitAll()
			.anyRequest() //所有请求都要经过验证
				.authenticated()
				.and()
			.formLogin() //登陆页面设为不需要验证
				.loginPage("/login")
				.permitAll()
				.and()
			.logout() //登出请求设为不需要验证
				.permitAll()
				.and()
			.headers() //如果使用iframe的话需要这段配置
				.frameOptions()
				.sameOrigin()
				.httpStrictTransportSecurity()
				.disable(); 
	
	}

	private String getUserQuery() {
		return "SELECT t.user_name as 'username', t.pass_word as 'password', t.enabled as 'enabled' FROM demo.users t WHERE t.user_name = ?";
	}

	private String getAuthoritiesQuery() {
		return "SELECT t.user_name as 'username', t.user_auth as 'authority' FROM demo.authorities t WHERE t.user_name = ?";
	}
	
}

 

数据库里面有两张表

user表,字段有username,password,enable

authority表,权限等级表,字段有id,username,authority

 

另外,如果想要根据自己的需求定制登陆登出

新建一个这样的controller:

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController
public class AuthenticationController {
	
	@RequestMapping(value = "/login", produces = "text/html; charset=utf-8")
	public ModelAndView login(HttpServletRequest request){
		return new ModelAndView("loginPage");
	}
	
}

 

以及一个个性化的登录页面,处理所有的登录和登出:

<%@ page language="java" contentType="text/html" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Login</title>
</head>
<body>
	<form name="f" action="login" method="post">
		<input type="hidden" name="${_csrf.parameterName}"
			value="${_csrf.token}" />
		<fieldset>
			<c:if test="${param.error != null}">
				<p><span style="color:red;">Invalid username and password.</span></p>
			</c:if>
			<c:if test="${param.logout != null}">
				<p><span style="color:red;">You have been logged out.</span></p>
			</c:if>
			<legend>Please Login</legend>
			<label for="username">Username</label> <input type="text"
				id="username" name="username" /> <label for="password">Password</label>
			<input type="password" id="password" name="password" />
			<div class="form-actions">
				<button type="submit" class="btn">Log in</button>
			</div>
		</fieldset>
	</form>
</body>
</html>

 

补充:

1. 登陆自动转发请求/login,可以参考前面SecurityConfig.class的代码进行修改。

2. 如果输错密码,会自动转发请求/login?error

3. 登出自动转发请求/login?logout

 

个性化的页面,加密方式,等等都可以按需定制,spring security很强大的。

配置完成,网站有了全局的权限管理咯

 

以上

 

1
1
分享到:
评论

相关推荐

    spring cloud2.0 eureka server spring security配置

    以上就是关于Spring Cloud 2.0中Eureka Server与Spring Security配置的相关知识点。通过这些配置,你可以确保Eureka Server的数据安全,防止未授权的访问。在实际项目中,还需要根据具体的业务需求进行调整和优化。

    spring security配置实例

    ### Spring Security配置实例详解 #### 一、Spring Security简介与应用场景 Spring Security 是一个功能强大的安全框架,提供了全面的安全服务,支持认证、授权以及其他安全服务。它为开发人员提供了高度可定制化...

    springsecurity使用配置详解

    在提供的压缩包`springsecurity配置demo`中,你将找到示例代码和详细说明,这将帮助你更好地理解和实践上述概念。通过学习和实践这些示例,你将能够为自己的Spring应用程序构建强大的安全防护。

    Restful风格服务端应用的Spring Boot + Spring Security配置

    这篇博客将深入探讨如何配置Spring Boot与Spring Security,以创建一个安全的RESTful服务。 首先,我们需要理解Spring Boot的核心特性,它简化了Spring应用程序的初始化和配置过程。通过自动配置和起步依赖,Spring...

    SPRING SECURITY配置

    **Spring Security配置详解** Spring Security是一款强大的安全框架,它为Java应用提供了全面的安全服务,包括认证、授权和访问控制。本文将深入探讨Spring Security的核心概念、配置方式以及常见应用场景。 ### 1...

    Spring Security 配置实例XML文件

    Spring Security 配置实例XML文件

    spring security3配置和使用实例+教程

    教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...

    详解spring security 配置多个AuthenticationProvider

    Spring Security 配置多个 AuthenticationProvider 详解 Spring Security 是一个功能强大且灵活的安全框架,提供了多种身份验证机制和访问控制机制。在实际开发中,我们经常需要配置多个身份验证提供程序...

    26.JavaWeb-SpringSecurity安全框架-SpringSecurity配置类

    SpringSecurity配置类

    spring security 配置(含源码)

    了解了这些核心概念后,你可以通过`springsecurity-sample`项目中的代码实践,进一步熟悉Spring Security的配置和使用。这个项目可能包含了一个简单的Spring Boot应用,其中已经集成了Spring Security,并提供了一些...

    spring-security多登录页面配置

    ### Spring Security 多登录页面配置详解 在许多大型企业级应用中,为了更好地实现权限管理和用户体验,往往会采用多个登录页面的方式来进行用户身份验证。这种方式能够有效地将不同类型的用户(如前台用户、后台...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题 SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 ...

    SpringSecurity笔记,编程不良人笔记

    在`SpringSecurity.md`和`SpringSecurity.pdf`文档中,可能包含SpringSecurity配置、自定义用户服务、授权策略等方面的代码示例。`codes`目录可能包含实际运行的项目代码,方便读者实践和理解。 8. **图笔记.draw...

    java学习之SpringSecurity配置了登录链接无权限

    我们在使用SpringSecurity作为后台权限框架的时候,框架给我们提供了配置登录请求的接口,供我们配置登录链接,当我们配置了登录链接地址后,前端访问登陆请求的时候显示无权限。 异常分析 由于SpringSecurity的...

    spring security 2 配置说明

    - **配置**:这是Spring Security配置中最核心的部分,通过`&lt;http&gt;`元素可以定义哪些URL需要进行身份验证和授权。`auto-config='true'`属性表示自动配置,简化了配置过程。`&lt;intercept-url&gt;`元素用于指定特定URL的...

    Spring Security 配置

    介绍了Spring Security 的配置方法及其使用技巧

    Spring Security 基本使用和配置代码

    这是自定义Spring Security配置的主要地方。你可以重写`configure(HttpSecurity http)`方法来定义HTTP安全规则。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends ...

    精彩:Spring Security 演讲PPT

    3. **定义安全规则**: 在Spring Security配置文件中定义具体的认证和授权规则,如使用数据库存储用户信息、使用自定义登录页面等。 #### 四、Spring Security 2.x 概览 Spring Security 2.x不仅提供了强大的功能...

    spring-security 官方文档 中文版

    - **Config (spring-security-config.jar)**:提供了配置 Spring Security 的 XML 命名空间支持。 - **LDAP (spring-security-ldap.jar)**:提供了 LDAP 目录服务支持。 - **ACL (spring-security-acl.jar)**:...

    SpringSecurity入门小demo(SSM+Spring Security)

    在 `HelloSpringSecurity` 文件中,你可能看到以下关键代码: - **WebSecurityConfigurerAdapter** 类:这是 Spring Security 提供的配置适配器,可以覆盖其方法来定制安全规则。 - `configure(HttpSecurity http)...

Global site tag (gtag.js) - Google Analytics