springsecurity学习(一)

项目结构如下:

springsecurity学习(一)

 

项目中使用到了springmvc和spring security,导入相关的jar包

一、创建控制器HelloController.java

        ①url="/welcome" 或 "/",跳转到hello.jsp

        ②url="/admin"  跳转到admin.jsp

代码如下:

package com.study.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
	@RequestMapping(value={"/","welcome**"},method = RequestMethod.GET)
	public ModelAndView welcomePage(){
		ModelAndView model = new ModelAndView();
		model.addObject("title","Spring Security Hello World.");
		model.addObject("message","This is welcome page.");
		model.setViewName("hello");
		return model;
	}
	@RequestMapping(value="/admin**",method=RequestMethod.GET)
	public ModelAndView adminPage(){
		ModelAndView model = new ModelAndView();
		model.addObject("title","Spring Security Hello World.");
		model.addObject("message","this is protected page");
		model.setViewName("admin");
		return model;
	}
}


 

二、hello.jsp和admin.jsp

hello.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>Insert title here</title>
</head>
<body>
	<h1>Title:${title }</h1>
	<h1>Message:${message }</h1>
</body>
</html>


admin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>Insert title here</title>
</head>
<body>
	<h1>Title:${title }</h1>
	<h1>Message:${message }</h1>
	<c:if test="${pageContext.request.userPrincipal.name != null }">
		<h2>Welcome:${pageContext.request.userPrincipal.name}</h2>
		<a href="<c:url value="/j_spring_security_logout"/>">logout</a>
	</c:if>
</body>
</html>


 

三、springmvc配置文件mvc-dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
	<context:component-scan base-package="com.study.*" />
 
	<bean
	  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	  <property name="prefix">
		<value>/WEB-INF/pages/</value>
	  </property>
	  <property name="suffix">
		<value>.jsp</value>
	  </property>
	</bean>
 
</beans>

 

四、spring security配置文件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.0.xsd
	http://www.springframework.org/schema/security
	http://www.springframework.org/schema/security/spring-security-3.2.xsd">
 
	<http auto-config="true">
		<intercept-url pattern="/admin**" access="ROLE_USER" />
	</http>
 
	<authentication-manager>
	  <authentication-provider>
	    <user-service>
		<user name="moneyZhong" password="123456" authorities="ROLE_USER" />
	    </user-service>
	  </authentication-provider>
	</authentication-manager>
 
</beans:beans>

由文件可以看到只有“moneyZhong”允许访问/admin

 

 

五、在spring mvc 中集成spring security 只需要定义DelegatigFilterProxy 过滤器来拦截请求,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_3_0.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
<display-name>Spring MVC Application</display-name>
 
	<!-- Spring MVC -->
	<servlet>
		<servlet-name>mvc-dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc-dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
 
        <!-- Loads Spring Security config file -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/spring-security.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>


</web-app>


 


六、演示

       ①访问http://localhost:8080/springsecurity01/welcome

springsecurity学习(一)

 

      ②访问admin.jsp,

springsecurity学习(一)

这是spring security对请求进行了拦截,跳转至/spring_security_login,有spring security提供的登录界面

 

当输入错误的用户密码时,错误提示将显示

springsecurity学习(一)

 

当用户输入正确的用户名密码 moneyZhong /123456时,将会跳转到admin.jsp

 

springsecurity学习(一)

 

ps:

 1.在web.xml中配置spring security时是通过DelegatingFilterProxy过滤器进行,拦截了所有请求。在spring-security.xml配置文件中了,设置了哪些拦截拦截的ur需要相应的权限。/welcome进行了拦截但是它不需要权限,/admin需要ROLE_User权限。

2.当用户访问的url需要某种权限时,但用户未进行登录,会跳转到spring security提供的登录界面,该登录界面的源码如下:

 

<html><head><title>Login Page</title></head><body onload=‘document.f.j_username.focus();‘>
<h3>Login with Username and Password</h3><form name=‘f‘ action=‘/springsecurity01/j_spring_security_check‘ method=‘POST‘>
 <table>
    <tr><td>User:</td><td><input type=‘text‘ name=‘j_username‘ value=‘‘></td></tr>
    <tr><td>Password:</td><td><input type=‘password‘ name=‘j_password‘/></td></tr>
    <tr><td colspan=‘2‘><input name="submit" type="submit" value="Login"/></td></tr>
  </table>
</form></body></html>

3.如何自定义登录界面?(见二)

 

 

springsecurity学习(一),布布扣,bubuko.com

springsecurity学习(一)

上一篇:jsp在url中会被解析成html


下一篇:[连载]JavaScript讲义(01)