注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

IOS & JAVA KEY

(iMilo)

 
 
 

日志

 
 
关于我

All the splendor in the world is not worth a good friend!! Hello my friend!!

网易考拉推荐

Spring Security—一个简单的HelloWorld  

2010-06-09 23:02:55|  分类: Spring |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

 

准备:在使用Spring Security之前,我们先下载其所需的Jar包,我这里是下载的如下版本:spring-security-3.0.2.RELEASE.zip,在使用Spring Security之前我们必须先建Web项目(项目名称:security),然后在加入依赖类库[我的解决方法是:解压spring-security-3.0.2.RELEASE.zip,然后有一个spring-security-samples-tutorial-3.0.2.RELEASE.warwar文件,用WinRar方式打开,将其WEB-INF下的lib下的所有jar文件拷贝到security项目lib下,即可]

 

操作步骤:

一、配置过滤器,即修改web.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- log4j config begin [配置日志] -->

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>/WEB-INF/config/log4j.properties</param-value>

    </context-param>

    <context-param>

        <param-name>log4jRefreshInterval</param-name>

        <param-value>6000</param-value>

    </context-param>

    <listener> 

    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

    </listener>

    <!-- log4j config end -->

    <!-- spring config begin -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

            /WEB-INF/config/spring/*.xml

        </param-value>

    </context-param>

    <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <!-- spring config end -->

   

    <!-- security获得session生命周期事件,这个与单点登录相关 -->

    <listener>

        <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>

    </listener>

    <!-- security session end-->

<!-- security session begin [权限配置过滤器]-->

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

    <welcome-file-list>

      <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

说明:我们将相关的配置文件都放置在WEB-INF/config/目录下,而Spring相关配置文件放置在WEB-INF/config/spring/目录下。

二、配置Spring Security相关配置文件,我们建立一个applicationContext.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:security="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">

   

    <security:http auto-config="true">

        <!-- session管理,防止重复登录,同一用户第二次登录会让第一次登录失效 -->

        <!-- 

        <security:session-management>

            <security:concurrency-control max-sessions="1" />

        </security:session-management>

        -->

        <!-- 如果第二次登录,阻止,并显示错误信息 -->

        <security:session-management>

            <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>

        </security:session-management>

        <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />

        <security:intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>

        <security:intercept-url pattern="/**" access="ROLE_USER"/>

        <!-- 登录页面为/login.jsp,登录成功页面为/index.jsp,且总是用这个页面为登录成功页面 -->

        <security:form-login login-page="/login.jsp"

            authentication-failure-url="/login.jsp?error=true"

            default-target-url="/index.jsp"

            always-use-default-target="true" />

    </security:http>

   

    <security:authentication-manager>

        <security:authentication-provider>

            <security:password-encoder hash="md5"/><!—这里使用md5对密码加密-->

            <security:user-service>

                <security:user name="user" password="c4ca4238a0b923820dcc509a6f75849b" authorities="ROLE_USER" />

<security:user name="admin" password="c4ca4238a0b923820dcc509a6f75849b" authorities="ROLE_USER,ROLE_ADMIN" />

            </security:user-service>

        </security:authentication-provider>

    </security:authentication-manager>

<!-此处是配置资源文件,记录错误信息等,在Spring Security框架中其实已经定义好了,在spring-security-core-3.*.*.jarorg.springframework.security包下,我们只要basename引用此处的资源文件,就不用自己再写资源文件,但在实际项目中,我们都自己的定义资源文件(即对框架资源文件的重写)-à

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

        <property name="basename" value="classpath:messages_zh_CN" />

    </bean>

</beans>

三、编写jsp文件,即在WebRoot文件夹下创建三个jsp文件,分别为login.jspindex.jspadmin.jsp,下面我们分别来说明:

Alogin.jsp文件,登录页面,其实这个不是必须的,如果我们没有编写此文件,框架会自动生成,但如果使用自动生成,那么我们就不需要在spring的配置文件配置<security:form-login *****>了,且对login.jsp的拦截也可以去掉,但如果我们想写自己的登录页面我们也可以这样拦截login.jsp即:<security:intercept-url pattern="/login.jsp*" filter=”none” />说明,login.jsp文件不用拦截。但在此我们既然使用了login.jsp文件,那么其代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

    <title>Login Page</title>

</head>

<body onload='document.f.j_username.focus();'>

<center>

    <h3 style="color: lime">用户登录页面</h3>

    <form name='f' action='/security/j_spring_security_check' method='POST'>

      <div  style="display:${param.error == true? '' : 'none' }">

        <h4 style="color: red">${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message }</h4><br/>

      </div>

     <table>

        <tr><td> :</td><td><input type='text' name='j_username' value=''></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><input name="submit" type="submit" value=" "/></td>

        <td><input name="reset" type="reset" value=" "/></td>

        </tr>

        <tr></tr>

     </table>

    </form>

</center>

</body>

</html>

${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message }如果登录不成功,显示错误信息

B:index.jsp页面,登录成功页面,这里我们显示Session所有信息,用于说明登录的用户,其代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>天籁书城首页</title>

  </head>

  <body>

    <center><h2 style="color: red;">这是首页,欢迎!</h2></center>

    <%

        String[] names = session.getValueNames();

        for(int i = 0; i < names.length; i ++)

        {

     %>

         <%=names[i] %>&nbsp;==&nbsp;<%=session.getValue(names[i]) %><br /> 

     <%

         }

     %>

  </body>

</html>

Cadmin.jsp其实这个页面很简单,就是为了验证只有具有ROLE_ADMIN权限的用户才能看到此页面,在此就是admin用户了,其代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>系统管理员页面</title>

  </head>

  <body>

    这是超级管理员所登录的页面!<br>

  </body>

</html>

四、对日志配置:即在config下创建一个log4j.properties的属性文件,其实对于日志的配置相信大家都能在网上找到很多关于其配置的方法,这里就不做过多的说明,附上配置代码如下:

log4j.rootLogger=warn, stdout

 

log4j.logger.org=DEBUG, stdout

### direct log messages to stdout[Control] ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###

#log4j.appender.file=org.apache.log4j.DailyRollingFileAppender

#log4j.appender.file.append=false

#log4j.appender.file.datePattern='.'yyyy-MM-dd 

#log4j.appender.file.File=../webapps/security/logs/debug.log       

#log4j.appender.file.layout=org.apache.log4j.PatternLayout   

#log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} %p %c - %m%n

 

  评论这张
 
阅读(3419)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017