java笔记:SpringSecurity应用

来源:互联网 发布:软件行业的外包 编辑:程序博客网 时间:2024/05/01 12:01

  java项目首先要提的就是jar包了,Springsecurity的jar下载地址:http://static.springsource.org/spring-security/site/downloads.html。不过我的项目里的jar包比较旧点了,是从以前项目抽取出来的,我的工程结构图如下:

第一个实例:

第一个例子是最基本,最简单的,我第一次接触springsecurity时候觉得这个技术真惊艳,不过现在感觉也就那么回事了。

我首先编写的是web.xml:

<?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>SpringSecurityPrj</display-name>  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>        classpath:applicationContext*.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>  <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>

接下来编写的是applicationContext-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.0.xsd        http://www.springframework.org/schema/security        http://www.springframework.org/schema/security/spring-security-3.0.xsd">    <!-- 自动配置模式,拦截所有请求,有ROLE_USER才可以通过 -->    <http auto-config="true">        <intercept-url pattern="/**" access="ROLE_USER"/>    </http>    <!-- 认证管理器。用户名密码都集成在配置文件中 -->     <authentication-manager>        <authentication-provider>            <user-service>                <user name="sharp" password="sharp" authorities="ROLE_USER"/>            </user-service>        </authentication-provider>    </authentication-manager></beans:beans>

另外我新建了一个index.jsp文件,作用是登录成功后返回到index.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><span color="red">登录成功!</span></body></html>

当我们在浏览器地址栏里输入下面的url:

http://localhost:8080/SpringSecurityPrj/

我们就可以再浏览器里看到用户登录界面:

 呵呵,内置的登录页面,挺好玩的。没有使用过springsecurity可能还没发现我在那里配置用户名和密码吧,看下面一段代码,这里就是用户名和密码:

<user name="sharp" password="sharp" authorities="ROLE_USER"/>

测试一:

我们录入用户名:admin;密码:admin,然后点击提交查询,最终页面如下:

登录失败了哦!

测试二:我们录入用户名:sharp;密码:sharp;如下图:

点击提交查询后,页面如下:

 

页面跳转到index.jsp页面,登录成功了。

哈哈,用这个做登录是不是很easy啊!

(博主温馨提示:我开始做测试是使用myeclipse,所有操作都没问题,然后改用eclipse-java EE,每次启动tomcat,eclipse都报了Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor错误,启动了45秒后tomcat自动停止,我在百度查原因,找到了一个解决方法,解决方法如下:

Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.修改 workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml文件。<servers><server hostname="localhost" id="JBoss v5.0 at localhost" name="JBoss v5.0 atlocalhost" runtime-id="JBoss v5.0" server-type="org.eclipse.jst.server.generic.jboss5"server-type-id="org.eclipse.jst.server.generic.jboss5" start-timeout="1000" stop-timeout="15" timestamp="0"><map jndiPort="1099" key="generic_server_instance_properties" port="8090"serverAddress="127.0.0.1" serverConfig="default"/></server></servers>把 start-timeout="45" 改为 start-timeout="1000" 或者更长重启eclipse就可以了。这个原因就是:启动tomcat需要的时间比45秒大了,Eclipse会判断tomcat在默认的时间是否启动了,如果在默认45秒没有启动就会报错了。

在第一个实例基础上我做了第二个实例。

第二个实例:

 第一个例子里的登录页面是springsecurity的默认页面,这种死板的页面满足不了千变万化的用户需求,因此这个实例里我将自定义登录界面,这里我们还要加入几个jar包,最新的lib包下的目录如下所示:

 

新建一个login.jsp页面代码如下:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ 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 onLoad="document.f.j_username.focus();"><c:if test="${not empty param.login_error}">    <font color="red">        登录失败,请重试.<br/><br/>        原因:<c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>    </font></c:if><form name="f" action="<c:url value='j_spring_security_check'/>" method="POST">    <table>        <tr>            <td>用户名:</td>            <td>                <input type='text' name='j_username' value='<c:if test="${not empty param.login_error}"&gt;&lt;c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>'/>            </td>        </tr>        <tr>            <td>密     码:</td>            <td><input type='password' name='j_password'></td>        </tr>        <tr>            <td>                <input type="checkbox" name="_spring_security_remember_me"></td><td>两周内自动登录            </td>        </tr>        <tr>            <td colspan='2' align="center">                <input name="submit" type="submit">                  <input name="reset" type="reset">            </td>        </tr>    </table></form></body></html>

修改applicationContext-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.0.xsd        http://www.springframework.org/schema/security        http://www.springframework.org/schema/security/spring-security-3.0.xsd">    <!-- 自动配置模式,拦截所有请求,有ROLE_USER才可以通过 -->    <http auto-config="true">        <intercept-url pattern="/login.jsp*"  access="IS_AUTHENTICATED_ANONYMOUSLY" />        <intercept-url pattern="/**" access="ROLE_USER"/>        <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/>     </http>    <!-- 认证管理器。用户名密码都集成在配置文件中 -->     <authentication-manager>        <authentication-provider>            <user-service>                <user name="sharp" password="sharp" authorities="ROLE_USER"/>            </user-service>        </authentication-provider>    </authentication-manager>    <!-- 指定中文资源 。默认命名空间是security,所以要加前缀beans: -->      <beans:bean id="messageSource"         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">        <beans:property name="basename"  value="classpath:org/springframework/security/messages_zh_CN"/>       </beans:bean></beans:beans>

我们在浏览器地址栏里输入下面的url,点击回车,界面如下:

 

测试一:

我们录入用户名:admin;密码:admin,然后点击提交查询,最终页面如下:

登录失败!

测试二:我们录入用户名:sharp;密码:sharp;如下图:

点击提交查询,结果如下:

 

第三个实例:

只要是接触过权限管理的程序员都知道,一般的权限管理都有角色的概念,但是传统的角色都是在数据库建模,然后用编程的方式来实现的。在springsecurity里面就有角色的概念,用起来也很方便,上面的例子里我们使用了一个角色ROLE_USER,现在我们添加一个角色ROLE_ADMIN,我们修改applicationContext-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.0.xsd        http://www.springframework.org/schema/security        http://www.springframework.org/schema/security/spring-security-3.0.xsd">    <!-- 自动配置模式,拦截所有请求,有ROLE_USER才可以通过 -->    <http auto-config="true">        <intercept-url pattern="/login.jsp*"  access="IS_AUTHENTICATED_ANONYMOUSLY" />        <!-- 增加 ROLE_ADMIN角色-->        <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>        <intercept-url pattern="/**" access="ROLE_USER"/>        <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/>     </http>    <!-- 认证管理器。用户名密码都集成在配置文件中 -->     <authentication-manager>        <authentication-provider>            <user-service>                <!-- 添加ROLE_ADMIN角色 -->                <user name="admin" password="admin" authorities="ROLE_USER,ROLE_ADMIN"/>                <user name="sharp" password="sharp" authorities="ROLE_USER"/>            </user-service>        </authentication-provider>    </authentication-manager>    <!-- 指定中文资源 。默认命名空间是security,所以要加前缀beans: -->      <beans:bean id="messageSource"         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">        <beans:property name="basename"  value="classpath:org/springframework/security/messages_zh_CN"/>       </beans:bean></beans:beans>

另外我新建一个admin.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>Admin 管理界面</title></head><body><p style="color:red">admin.jsp页面</p></body></html>

修改下index.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><span color="red">登录成功!</span><br/><a href="admin.jsp">admin.jsp</a></body></html>

 测试一:

我们输入的用户名:sharp;密码:sharp,登录成功了,我们进入到了页面index.jsp:

 

点击admin.jsp链接,结果如下:

 

sharp用户没有ROLE_ADMIN角色的权限,所以sharp访问不了admin.jsp页面。

测试二:

我们输入的用户名:admin;密码:admin,登录成功了,我们进入到了页面index.jsp(如上图),

然后 

点击admin.jsp链接,结果如下:

 

 用户admin是可以访问admin.jsp页面。

好了,今天学习结束了!

总结下:今天都是具体操作,而且这些操作在网上多的不得了,不过我想学springsecurity都得从这一步开始,现在我对springsecurity理解还不深,整篇文章都是如何去编码,而没有一些知识的讲解,我会尽全力一步步深入,做软件最好还是知其所以然,明天看能不能研究原理,下一篇由springsecurity和数据库的结合开始。

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 挂了光纤跑了怎么办 cf天赋点多了怎么办 cf天赋点点错了怎么办 警用记录仪丢了怎么办 被伪基站覆盖了怎么办 加热包的水喝了怎么办 剩米饭放硬了怎么办 肉罐头拉环断了怎么办 5大战区拥兵自重怎么办 买的期房停工了怎么办 怀孕后长了副乳怎么办 耳朵冻的红肿了怎么办 吃螃蟹吃柿子了怎么办 吃了螃蟹和柿子怎么办 螃蟹与柿子同吃怎么办 手被鞭炮炸伤了怎么办 索尼l36h变砖了怎么办 oppor9s手机忘记解锁图案怎么办 索尼z5刷死机了怎么办 魅蓝note3被锁定怎么办 oppo图案锁忘了怎么办 手机图案锁忘w怎么办输 手机图案解锁密码忘了怎么办 忘记htc手机锁屏怎么办 我手机密码忘了怎么办 小米5x忘记密码怎么办 oppo忘记手机解锁图案怎么办 手机解锁图案忘了怎么办 苹果id给锁了怎么办 苹果手机忘了ld怎么办 4s忘记开机密码怎么办 取卵22个肚子胀怎么办 夜神模拟器很卡怎么办 夜神模拟器卡顿怎么办 入职体检有痔疮怎么办 泰迪鼻子干怎么办恢复 泰迪幼犬鼻子干怎么办 狗狗呕吐没精神怎么办 狗狗鼻子干拉稀怎么办 狗狗鼻子干呕吐怎么办 肛门直肠环断了怎么办