- 浏览: 38183 次
文章分类
最新评论
1.Spring Security概述
Spring Security是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作(度娘上抄的)。
2.实例功能
用户登录:(认证)
权限控制:(访问权限、最多登录控制)
3.jar包:
下载:http://dl2.iteye.com/upload/attachment/0088/7423/9f1490b7-2e67-3c9b-b3ce-a5563453645f.zip
4:数据库:
注意里面的密码存的时候要用MD5加密项目包com.spring.util中有MD5工具类
5:配置文件
web.xml
配置加载spring配置文件配置、springsecurty过滤器、用户登录过滤器、spring监听器。
2.account-security.xml
设置不同用户的访问权限、登录登出情况、springsecurity认证实现类、密码用MD5加密。
注意:
SecurityContextHolder.getContext().getAuthentication()为null的情况
1.如果在过滤器中获取用户信息而且此过滤器写在org.springframework.web.filter.DelegatingFilterProxy过滤器之后则返回null
2. <s:intercept-url pattern="/test.jsp" filters="none"/>中则如果访问test.jsp也将返回为null
其实简单的理解spring security就是一个过滤器A如果把过滤器写在spring security之前也就是说spring security过滤器没有在A中起到作用,同样把filters="none"则spring security过滤器也不骑作用。
6.配置文件写完了下面来看看实现类:
AccountDetailsServiceImpl.java
这个是用户认证实现类通过此类返回用户登录的信息如权限什么的
AccountDetails.java
这个是用户信息实现类它继承User(spring)包含用户、密码、权限等
基本的用户登录就关键在这两个类
AccountLogin.java
如果想获取用户信息请看下面的类用户每访问一个页面在上方打印当前用户的信息
spring security核心实现类基本以完成
下面是操作数据库的辅助类:
DataSource.java
AccountDaoImpl.java
java代码基本已完成:
登录jsp页面如下
注意访问的action要为j_spring_security_check,标签也要是j_username、j_password。
Spring Security是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作(度娘上抄的)。
2.实例功能
用户登录:(认证)
权限控制:(访问权限、最多登录控制)
3.jar包:
下载:http://dl2.iteye.com/upload/attachment/0088/7423/9f1490b7-2e67-3c9b-b3ce-a5563453645f.zip
4:数据库:
drop database if exists spring; create database spring; drop table if exists account; create table account( id int auto_increment primary key, user varchar(50), pass varchar(50), sign int );
注意里面的密码存的时候要用MD5加密项目包com.spring.util中有MD5工具类
5:配置文件
web.xml
配置加载spring配置文件配置、springsecurty过滤器、用户登录过滤器、spring监听器。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>SpringSecurity</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/account-security.xml </param-value> </context-param> <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> <!-- 如果要加过滤器的话已经要在springSecurityFilterChain后面加否者得不到用户信息 --> <filter> <filter-name>AccountLogin</filter-name> <filter-class>com.spring.security.AccountLogin</filter-class> </filter> <filter-mapping> <filter-name>AccountLogin</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2.account-security.xml
设置不同用户的访问权限、登录登出情况、springsecurity认证实现类、密码用MD5加密。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:s="http://www.springframework.org/schema/security" 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.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd" default-lazy-init="true"> <description>spring security</description> <!-- http安全配置 --> <s:http auto-config="true" use-expressions="true" access-denied-page="/denied.jsp"> <s:intercept-url pattern="/User/index.jsp" access="hasRole('ROLE_USER')"/> <s:intercept-url pattern="/Shop/index.jsp" access="hasRole('ROLE_SHOP')"/> <s:intercept-url pattern="/Service/index.jsp" access="hasRole('ROLE_SERVICE')"/> <s:intercept-url pattern="/Admin/index.jsp" access="hasRole('ROLE_ADMIN')"/> <s:form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp?error=true" /> <s:logout invalidate-session="true" logout-success-url="/login.jsp" logout-url="/j_spring_security_logout" /> <s:remember-me /> <s:session-management> <s:concurrency-control max-sessions="1" expired-url="/logining.jsp"/> </s:session-management> </s:http> <!-- 设置认证类 --> <s:authentication-manager alias="authenticationManager"> <s:authentication-provider user-service-ref="accountDetailsService"> <s:password-encoder ref="passwordEncoder"/> </s:authentication-provider> </s:authentication-manager> <!-- 认证bean --> <bean id="accountDetailsService" class="com.spring.security.AccountDetailsServiceImpl" /> <!-- 密码MD5加密bean --> <bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/> </beans>
注意:
SecurityContextHolder.getContext().getAuthentication()为null的情况
1.如果在过滤器中获取用户信息而且此过滤器写在org.springframework.web.filter.DelegatingFilterProxy过滤器之后则返回null
2. <s:intercept-url pattern="/test.jsp" filters="none"/>中则如果访问test.jsp也将返回为null
其实简单的理解spring security就是一个过滤器A如果把过滤器写在spring security之前也就是说spring security过滤器没有在A中起到作用,同样把filters="none"则spring security过滤器也不骑作用。
6.配置文件写完了下面来看看实现类:
AccountDetailsServiceImpl.java
这个是用户认证实现类通过此类返回用户登录的信息如权限什么的
public class AccountDetailsServiceImpl implements UserDetailsService { private AccountDao accountDao = new AccountDaoImpl(); @Override public UserDetails loadUserByUsername(String user) throws UsernameNotFoundException, DataAccessException { Account account = accountDao.getAccountByUser(user); AccountDetails accountDetails = null; if(account != null){ accountDetails = new AccountDetails(account.getUser(), account.getPass(), true, true, true, true, getAuthorities(account.getSign())); } return accountDetails; } /** * 根据用户类别取得信息为用户分配权限 * **/ public Collection<GrantedAuthority> getAuthorities(Integer access) { List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>(); authList.add(new GrantedAuthorityImpl("ROLE_USER")); if(access == 0){ authList.add(new GrantedAuthorityImpl("ROLE_ADMIN")); }else if(access == 1){ authList.add(new GrantedAuthorityImpl("ROLE_SERVICE")); }else if(access == 2){ authList.add(new GrantedAuthorityImpl("ROLE_SHOP")); }else if(access == 3){ authList.add(new GrantedAuthorityImpl("ROLE_USER")); } return authList; } }
AccountDetails.java
这个是用户信息实现类它继承User(spring)包含用户、密码、权限等
public class AccountDetails extends User{ /** * */ private static final long serialVersionUID = 1L; public AccountDetails(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) { super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); } }
基本的用户登录就关键在这两个类
AccountLogin.java
如果想获取用户信息请看下面的类用户每访问一个页面在上方打印当前用户的信息
public class AccountLogin implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) srequest; HttpServletResponse response = (HttpServletResponse) sresponse; request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //得到用户登录信息 PrintWriter out = response.getWriter(); String loginmes = "用户登录信息:<br/> <font color='red'>"+ SecurityContextHolder.getContext().getAuthentication().getPrincipal()+ "</font> <br/>"; System.out.println( SecurityContextHolder.getContext().getAuthentication().getPrincipal()); out.print(loginmes); filterChain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { } }
spring security核心实现类基本以完成
下面是操作数据库的辅助类:
DataSource.java
public enum DataSource { /** * 连接数据库工具类 * */ INSTANCE; private String url; private String user; private String pass; private Connection con; /** * 初始化连接数据库信息 * */ private DataSource() { url = "jdbc:mysql://127.0.0.1:3306/spring?useUnicode=true&characterEncoding=utf8"; user = "root"; pass = "mysql"; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, user, pass); System.out.println("con database sucess"); } catch (ClassNotFoundException e) { System.out.println("load driver fail"); e.printStackTrace(); } catch (SQLException e) { System.out.println("con database fail"); e.printStackTrace(); } } /** * 获得数据库连接 * * */ public Connection getCon(){ return con; } }
AccountDaoImpl.java
package com.spring.dao.impl; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.spring.bean.Account; import com.spring.dao.AccountDao; import com.spring.util.DataSource; public class AccountDaoImpl implements AccountDao { /** * 根据用户名返回一个包含用户信息的account类 * */ @Override public Account getAccountByUser(String name) { Account account = null; String sql = "select * from account where user = ?"; try { PreparedStatement ps = DataSource.INSTANCE.getCon().prepareStatement(sql); ps.setString(1, name); ResultSet rs = ps.executeQuery(); if(rs.next()){ account = new Account(); account.setId(rs.getInt("id")); account.setUser(rs.getString("user")); account.setPass(rs.getString("pass")); account.setSign(rs.getInt("sign")); } } catch (SQLException e) { System.out.println("sql: " + sql + " 查询出现异常 条件 :" + name); } return account; } }
java代码基本已完成:
登录jsp页面如下
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>登录</title> </head> <body> <form action="j_spring_security_check" method="post"> <input type="text" name="j_username" id="j_username"> <br/> <input type="password" name="j_password" id="j_password"> <br/> <input type="submit" value="提交"> </form> </body> </html>
注意访问的action要为j_spring_security_check,标签也要是j_username、j_password。
- SpringSecurity.zip (4.7 MB)
- 下载次数: 83
发表评论
-
JVM内存结构及分析
2017-07-16 19:38 525JVM内存模型 名称特征 ... -
JVM调优实例
2017-06-24 12:30 01.背景:由于最近上线新增业务模块,业务量要增加所以对上线服务 ... -
音视频编码转换-ffmpeg
2016-12-30 18:42 15371.前言 由于最近在做ios与android端需要做a ... -
git did not match any file(s) known to git
2016-04-23 23:49 29501.did not match any file(s) kno ... -
Static工具类线程安全问题
2016-01-08 11:39 22961.静态方法 无论是静态方法还是实例方法,在内存中都只 ... -
JavaThread-ThreadLocal笔记
2015-12-23 14:54 5031.ThreadLocal简介 早在JDK 1.2的版本中就提 ... -
JUC-CountDownLatch笔记
2015-12-23 10:53 5311.CountDownLatch简介 CountDownLat ... -
Lambda表达式实现设计模式:命令模式
2015-10-13 09:59 668如何在使用Java 8 Lambda表达式的函数式编程方式时实 ... -
mysql 错误汇总
2015-08-12 16:49 4111.Mysql ERROR 1045 (28000): Acc ... -
Java注解
2015-08-07 11:25 01.@Retention(RetentionPolicy.RU ... -
Base64 编解码 工具类
2015-07-28 22:48 42451.工具类: import java.io.Uns ... -
HttpClient(发送字符串,multipart, 参数等)
2015-07-10 11:12 2032备注:httpclient4.5 发送MultiPart/Pa ... -
转载-搜索引擎实时秒级更新
2015-07-08 14:02 831搜索是很多用户在天 ... -
tomcat-定时任务
2015-03-30 15:27 6091.监听类 import java.util.Timer ... -
JVM-工作原理
2015-03-16 23:26 611一、 JVM的生命周期 1. J ... -
tomcat-启动时启动额外线程并控制线程状态
2015-02-04 18:22 634通过启动线程可以进行后台的操作 1.创建servlet ... -
Exception in thread "main" SoapFault - faultcode: 'soapenv:Server.userException'
2015-01-20 22:32 13491.抛出此类错误大部分都是服务端发布webservice调用出 ... -
Tomcat映射虚拟目录
2015-01-19 22:43 01.设置虚拟目录 <Host>标签</H ... -
android-运行java main方法
2014-12-30 16:10 6801.右键入口类(含有Main方法的)Run Configura ... -
Mybatis 常见错误汇总
2014-12-28 22:31 01.插入数据到数据库是异常 ### Cause: java.s ...
相关推荐
简单的 springSecurity3例子代码
spring security acl 代码实例 spring security acl 代码实例spring security acl 代码实例spring security acl 代码实例spring security acl 代码实例spring security acl 代码实例
Spring Security的例子,包含所有jar包。
一个比较好的spring security实例
Spring boot + Spring Security 简单配置,数据库采用MongoDB
spring-Security简单例子,实现了对登录,访问权限的一些简单认证
Spring Security 配置实例XML文件
基于用户,角色,权限的spring security完整项目,包括登陆,免登陆,session配置,角色,权限验证等功能
完成的Spring Security实例,其中包括自定义数据库表结构、自定义登陆页面、使用数据库管理资源、自定义的密码编码器、自定义访问拒绝页面、动态管理资源结合自定义登录页面等方面的例子
Spring Security实战例子资源里面有4个小项目,都是利用maven搭建的。数据库要建立一个security的表
SSH + Spring Security3.2例子
spring security配置实例
用STS(Spring Tool Suite)开发的,spring mvc + spring security 实现的最简单的登录系统,无数据库。
SpringSecurity入门教程,完整可运行的实例
Spring Security 是spring框架中用来进行权限安全认证的框架
该实例是小弟按照吴老师教学讲义的security3文档一步一步写的, 例子一共七个 。实例注释清楚,一看就懂。 由于最近没分了,所以upload一个资源感谢大家下载 。 security3真是一款强大的框架 ,看我的这7个例子你就...
Spring security认证授权例子,自动创建数据库,在SysUser类增加字段,即可动态增加数据库对应表sys_user字段(前提是要删除原表,启动应用时才会重建表)
利用maven技术实现的基于spring MVC 和spring security做的权限管理系统案例,简单易懂,代码可以直接跑起来 不需要调试!!
spring security 官方的 maven 例子