最近在最shiro的多入口登录,搞了好久,就把spring security拿出来再炒一下,这是我以前在csdn写过的一篇博客。

spring security 是一个权限控制的框架。可以很方便地实现权限的控制,不需要我们手动地写拦截器去对于请求进行拦截,然后对于权限进行判断。这可以大大地减少工作量,并且,spring security提供了很可靠的安全保障。

废话不多说,以下为正文:

1、加入spring security的jar包,我是能过maven配合nexus进行jar包管理的。纯jar包也是可以的,下载相应的jar包添加到WEB-INF下的lib目录下即可。以下为pom.xml加入的依赖(来处官网http://projects.spring.io/spring-security/):

<dependencies>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
</dependencies>

2、在web.xml里面加入spring security的拦截器,当然配置文件也要加载,不过是通过正则表达式一次把spring的配置文件都加载完成的:

	<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring*.xml
</param-value>
</context-param>

  

	<!-- spring security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

3、配置spring-security.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd"> <!-- 不需要进行认证的资源,3.0之后才改为这样配置 -->
<!-- <http security="none" pattern="/**/index" /> -->
<http security="none" pattern="/**/login" />
<http security="none" pattern="/**/*.jpg" />
<http security="none" pattern="/**/*.png" />
<http security="none" pattern="/**/*.gif" />
<http security="none" pattern="/**/*.css" />
<http security="none" pattern="/**/*.js" /> <!--设置匹配学生用户url,登录页面和所拥有的权限,以及引用studentAuthManager验证管理 -->
<http auto-config="true" pattern="/student/**" use-expressions="true" authentication-manager-ref="studentAuthManager">
<form-login login-processing-url="/student/j_spring_security_check"
login-page="/student/login" authentication-failure-url="/student/login" default-target-url="/student/index"/>
<logout logout-success-url="/student/login" logout-url="/student/j_spring_security_logout" />
<intercept-url pattern="/student/**" access="hasRole('ROLE_STUDENT')" />
</http> <!--设置匹配管理员用户url,登录页面和所拥有的权限,以及引用adminAuthManager验证管理 -->
<http auto-config="true" pattern="/admin/**" use-expressions="true" authentication-manager-ref="adminAuthManager">
<form-login login-processing-url="/admin/j_spring_security_check"
login-page="/admin/login" authentication-failure-url="/admin/login" default-target-url="/admin/index"/>
<logout logout-url="/admin/j_spring_security_logout" logout-success-url="/admin/index" />
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
</http> <!--前台用户验证管理bean -->
<authentication-manager id="studentAuthManager">
<authentication-provider user-service-ref="studentDetailService">
<password-encoder hash="md5"></password-encoder>
</authentication-provider>
</authentication-manager> <!--后台管理用户验证管理bean -->
<authentication-manager id="adminAuthManager">
<authentication-provider user-service-ref="adminDetailService">
<password-encoder hash="md5"></password-encoder>
</authentication-provider>
</authentication-manager>
</beans:beans>

 4、重写实现UserDetailsService的接口(由于student的实现方式,跟admin的实现方式是一模一样的,所以此处只列出admin的例子):

@Service
public class AdminDetailService implements UserDetailsService{ @Resource
private AdminMapper adminMapper; public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Admin admin = adminMapper.selectByUsername(username);
return admin;
} }

5、在Admin的实体实现UserDetails接口(由于仅为demo所以权限是写死了的,可以从数据库取出),student实现也是实现UserDetails接口,不重复贴代码了。

public class Admin implements UserDetails{
private static final long serialVersionUID = 1557391641237960295L; private Integer id; private String username; private String password; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} //此部分的权限应该由数据库取出,此处不作取出操作
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
return authorities;
} public void setPassword(String password){
this.password = password;
} public void setUsername(String username){
this.username = password;
} public String getPassword() {
return password;
} public String getUsername() {
return username;
} public boolean isAccountNonExpired() {
return true;
} public boolean isAccountNonLocked() {
return true;
} public boolean isCredentialsNonExpired() {
return true;
} public boolean isEnabled() {
return true;
}
}

6、如果不写页面的话,spring security会使用它默认的页面,十分的丑陋,不过所幸可以自己写,以下为自己写的页面(也十分地丑陋):

<body>
<form action="j_spring_security_check" method="post">
username:<input type="text" name="j_username"/><br/>
password:<input type="password" name="j_password"/><br/>
Remember Me:<input name="_spring_security_remember_me" type="checkbox" value="true"/><br/>
<input type="submit" value="提交"/>
</form>
</body>

7、访问,登录,大功告成,由于此部分的代码由项目代码改的,所以没有demo不好意思!!!(有机会一定补上= =||,估计是补不上了)

 

spring security 3.x 多页面登录配置入门教程的更多相关文章

  1. SpringBoot + Spring Security 基本使用及个性化登录配置详解

    Spring Security 基本介绍 这里就不对Spring Security进行过多的介绍了,具体的可以参考官方文档 我就只说下SpringSecurity核心功能: 认证(你是谁) 授权(你能 ...

  2. Spring Security(02)——关于登录

    目录 1.1     form-login元素介绍 1.1.1    使用自定义登录页面 1.1.2    指定登录后的页面 1.1.3    指定登录失败后的页面 1.2     http-basi ...

  3. Spring Security 整合freemaker 实现简单登录和角色控制

    Spring Security 整合freemaker 实现简单登录和角色控制     写这篇文章是因为我做了一个电商网站项目,近期刚加上权限控制.整个过程很简单,在此给大家梳理一下,也算是自己对知识 ...

  4. Spring Security 集成CAS实现单点登录

    参考:http://elim.iteye.com/blog/2270446 众所周知,Cas是对单点登录的一种实现.本文假设读者已经了解了Cas的原理及其使用,这些内容在本文将不会讨论.Cas有Ser ...

  5. Spring Security 解析(四) ——短信登录开发

    Spring Security 解析(四) -- 短信登录开发   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security ...

  6. Spring Security 整合 微信小程序登录的思路探讨

    1. 前言 原本打算把Spring Security中OAuth 2.0的机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录的流程有点不一样 ...

  7. Spring security 知识笔记【自定义登录页面】

    一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  8. spring security结合数据库验证用户-XML配置方式

    之前的用户信息我们都是使用的内存用户,测试例子可以,实际中使用肯定不行,需要结合数据库进行验证用户.这就是本节的重点: 项目目录如下:  在之前的项目中的依赖中添加两个依赖: <dependen ...

  9. spring security集成cas实现单点登录

    spring security集成cas 0.配置本地ssl连接 操作记录如下: =====================1.创建证书文件thekeystore ,并导出为thekeystore.c ...

随机推荐

  1. Unity编程标准导引-3.3 Transform

    本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan 每个游戏对象(GameObject),其存在于游戏世界,都有一个位置.朝向.大小等基本定位信息 ...

  2. toupper函数及一些小程序

    toupper 原型:extern int toupper(int c); 用法:#include <ctype.h> 功能:将字符c转换为大写英文字母 说明:如果c为小写英文字母,则返回 ...

  3. CLAHE的实现和研究

    CLAHE算法对于医学图像,特别是医学红外图像的增强效果非常明显. CLAHE  https://en.wikipedia.org/wiki/Adaptive_histogram_equalizati ...

  4. MINA、Netty、Twisted一起学(十二):HTTPS

    由于HTTPS协议是由HTTP协议加上SSL/TLS协议组合而成,在阅读本文前可以先阅读一下HTTP服务器和SSL/TLS两篇博文,本文中的代码也是由这两篇博文中的代码组合而成. HTTPS介绍 上一 ...

  5. js:如何在循环异步请求的每次返回中添加想要的值

    先看一个场景 var arr = ["a","b","c"]; for (var i in arr) {         $.get(&qu ...

  6. WebSite---前台系统图片验证码心得

    背景: 因为移动端APP和Msite手机注册发送短信验证码没有添加图片验证码功能.公司的短信接口被恶意刷取.所以我们就觉得在移动端添加一个图片验证码功能.分享一下大体实现方式思路.PS demo是自己 ...

  7. Memcached·Redis缓存的基本操作

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  8. spring-framework-reference阅读笔记(一)

    Spring Framework Runtime 首先需要对Spring FrameWok框架有个直观的认识 Java日志框架的发展史 在读到Spring依赖JCL的时候,对Java的日志系统做点普及 ...

  9. 抓包工具Wireshark的使用

    WireShark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息. WireShark界面简介 启动WireShark的界面如下: 选择网卡 wireshar ...

  10. iOS 调试心得

    修复 bug 占用我们日常开发的大部分时间,熟练的使用调试工具可以给我们节约大部分的时间. LLDB 的常用命令 expression expresion 是一个非常常用的命令,我们可以通过这个命令来 ...