做了大概一天半吧,才终于做出来,还是小有成就的(PS:还是有点笨的,多多见谅)
两份代码均会分享给大家,但是还是希望大家可以看完我的啰嗦哈
项目呢分为俩种,
第一种是Spring +pom
第二种是Spring+Gradle
本人做的是Spring+Gradle的就拿这个给大家介绍了
1.首先需要创建一个Gradle的项目


完成之后进入就是这样

其他所需的一些依赖
//导入“spring-webmvvc” “spring-context” “js tl-api”
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.0.4.RELEASE'
compile group: 'org.springframework', name: 'spring-context', version: '5.0.5.RELEASE'
compile group: 'javax.servlet.jsp.jstl', name: 'jstl-api', version: '1.2'
/*jstl标签支持支持*/
// https://mvnrepository.com/artifact/jstl/jstl
implementation group: 'jstl', name: 'jstl', version: '1.2'
/*-----------需要对结果的json解析在这里引入了三个所需核心架包---------------*/
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.13.1'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.1'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.13.1'
/*security需要专门的标签支持*/
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs
implementation group: 'org.springframework.security', name: 'spring-security-taglibs', version: '5.6.1'
/*---------------这里是spring-security的页面权限控制所需要的架包---------------------*/
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-web
implementation group: 'org.springframework.security', name: 'spring-security-web', version: '5.6.1'
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-config
implementation group: 'org.springframework.security', name: 'spring-security-config', version: '5.6.1'
/*---------------security的核心架包----------------------*/
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-core
implementation group: 'org.springframework.security', name: 'spring-security-core', version: '5.6.1'




这是选择完之后的,注意先别急着点击OK,还需要把刚刚复制的
\WEB-INF\web.xml粘贴到webapp后面,即可点击OK

这样就OK了,然后就可以继续了
这就是完成之后的样子,你需要建立自己的包和Controller以及jsp,这里我就一起建立了
然后你需要到在resource中进行新建俩个XML

目录结构如下所示



完成上面之后,在web.xml会出现以下拦截器
这个是
Spring Security过滤器链,注意过滤器名称必须是springSecurityFilterChain
“Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。网页上的某些操作或数据只有用户登录之后才能访问,可以用filter来过滤掉未登录的用户,只让已经登录的用户继续访问。”

光有这些还是不够的,我们需要配置以下
<servlet>
<servlet-name>SpringMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<!-- 表示容器再启动时立即加载servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

下面是resource下的spring-servlet.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 注解驱动配置 -->
<mvc:annotation-driven />
<!--包扫描-->
<context:component-scan base-package="com.controller"/>
<!-- 对静态资源放行 -->
<mvc:default-servlet-handler />
<!-- ResourceViewResolver视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--设置前缀 前缀"/"开头不要忘记,否则url路径有问题-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--设置后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list >
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</beans>
下面是resource下的spring-security.xml的配置文件
里面的东西需要根据自己项目的进行更改,不会的百度查一下即可,我这里就不多啰嗦里面的文档内容(主要是我也不太理解,怕误导各位)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 10. Spring security认证权限配置-->
<!-- ================ Spring security start ================ -->
<!--从下面的代码中,我们可以看出配置的详细信息:登录页面自定义为 login.jsp、
登录页面提交的 url 为 /admin/login、登录时使用的用户名对应着 login.jsp
页面中登录表单的 username 属性、登录时使用的密码对应着 login.jsp
页面中登录表单的 password 属性。登录失败时自动跳转到 err0.jsp,
登录成功时自动跳转到 success.jsp。
需要注意的是:
我们在 intercept-url 中定义了所有路径的请求都需要 ROLE_USER 权限,
这就意味着我们自定义的 /login.jsp、/failer.jsp
也 需要该权限,这样就会形成了一个死循环。解决办法就是给 /login.jsp和 /fail.jsp 放行。
-->
<!-- 配置不拦截的资源 -->
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="/fail.jsp" security="none"/>
<!--< !-- 第一种方法,可以用 default-target-url 作为一个controller 来跳转.比较简单 –>-->
<!-- <http auto-config=""true"">
<intercept-url pattern=""/app/welcome*"" access=""ROLE_USER"">
<intercept-url pattern=""/app/admin*"" access=""ROLE_ADMIN"">
<form-login login-page=""/app/login""
default-target-url=""/app/dispatch""
authentication-failure-url=""/app/loginfailed"">
<logout logout-success-url=""/app/logout"">
</logout>
</form-login></intercept-url></intercept-url></http>-->
<!-- 第一种方法结束 -->
<security:http auto-config="true" use-expressions="false">
<security:intercept-url pattern="/user" access="ROLE_USER" />
<security:intercept-url pattern="/**" access="ROLE_ADMIN" />
<security:form-login login-page="/login.jsp"
login-processing-url="/login"
username-parameter="username"
password-parameter="password"
authentication-failure-url="/fail.jsp"
authentication-success-forward-url="/index.jsp"/>
<!-- 必须配置,否则自定义登录页/login.jsp提交login会有403错误 -->
<security:csrf disabled="true"/>
</security:http>
<!-- 关闭跨域请求 -->
<!-- <security:csrf disabled="true"/>-->
<!-- 3).模拟用户(测试,不用连接数据库),设置spring security认证用户信息的来源 -->
<!--
springsecurity默认的认证必须加密,加上{noop}表示不加密认证
-->
<bean id="webexpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" />
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user" password="{noop}123456" authorities="ROLE_USER"/>
<security:user name="admin" password="{noop}111222" authorities="ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>
这里提一个知识点哈
也是自己之前一直写但是一直也没注意的一个知识点分享给大家
如果要是用JSON格式往前端传值的话,那么你就应该使用
( @Controller和@ResponseBody )或者@RestController
那么这个RestController中呢包含了Controller和ResponseBody这两个注解
那么像MVC项目,不需要JSON前后端传值的话,那么就用Controller即可
如果你写了一个jquery的方法想要用js来传值的话,那么你就需要要RestController这个注解来实现
言归正传哈,继续往下走
这是Controller中的内容
@Controller
public class FirstController {
@RequestMapping(value = "/hello" ,method = RequestMethod.POST)
public ModelAndView hello(){
ModelAndView mv =new ModelAndView();
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
Date date = new Date(System.currentTimeMillis());
String message ="Hello world @ " +formatter.format(date);
mv.setViewName("/loginIn");
mv.addObject("msg",message);
return mv;
}
}
index.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页登录</title>
</head>
<body>
<div style="align-content: center">
<form action="${pageContext.request.contextPath}/hello" method="post">
<input type="submit" value="进入首页"/>
</form>
</div>
</body>
</html>
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<style>
html{
width: 100%;
height: 100%;
overflow: hidden;
font-style: initial;
}
body{
width: 100%;
height: 100%;
font-family: 'Open Sans',sans-serif;
margin: 0;
background-color: darkseagreen;
}
#login{
position: absolute;
top: 50%;
left:50%;
margin: -150px 0 0 -150px;
width: 300px;
height: 300px;
}
#login h1{
color: #fff;
text-shadow:0 0 10px;
letter-spacing: 1px;
text-align: center;
}
h1{
font-size: 2em;
margin: 0.67em 0;
}
input{
width: 278px;
height: 18px;
margin-bottom: 10px;
outline: none;
padding: 10px;
font-size: 13px;
color: #fff;
text-shadow:1px 1px 1px;
border-top: 1px solid #312E3D;
border-left: 1px solid #312E3D;
border-right: 1px solid #312E3D;
border-bottom: 1px solid #56536A;
border-radius: 4px;
background-color: #2D2D3F;
}
.but{
width: 277px;
min-height: 20px;
display: block;
background-color: #4a77d4;
border: 1px solid #3762bc;
color: #fff;
padding: 9px 14px;
font-size: 15px;
line-height: normal;
border-radius: 5px;
margin: 0;
}
</style>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>登录界面</title>
</head>
<body>
<div id="login">
<h1>Login</h1>
<form action="login" method="post" >
<input type="text" required="required" placeholder="用户名" name="username" />
<input type="password" required="required" placeholder="密码" name="password"/>
<button class="but" type="submit">登录</button>
<div style="padding: 10px 20px"></div>
<button class="but" type="reset">重置</button>
</form>
</div>
</body>
</html>
fail.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<div style="align-content: center">
登陆失败请重新登录<br/>
返回登录请点击<a href="${pageContext.request.contextPath}/login.jsp">这里</a>
</div>
</body>
</html>
loginIn.jsp 注意(这个jsp是放到了WEB-INF/jsp中哈)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix='security' uri='http://www.springframework.org/security/tags'%>
<html>
<head>
<title>简单应答</title>
</head>
<body style="text-align: center">
<h2> 当前登录用户:<security:authentication property="principal.username"></security:authentication></h2>
<span>${msg}</span>
<h2><a href="${pageContext.request.contextPath}/login.jsp">登陆页面</a></h2>
</body>
</html>
配置Tomcat


懒得用Ps了,凑合看吧,

点击OK

首页效果图


这样就好啦,项目代码地址:
提取码:zhdu
a2rq
本文档详述了一位开发者如何使用Spring+Gradle搭建一个Web应用,包括添加相关依赖、配置Spring Security以及处理JSON数据。开发者分享了创建项目、配置拦截器、设置过滤器链、建立Controller和视图解析器的过程,并提供了关键代码片段。此外,还涉及了Spring Security的配置以及登录验证的实现,最后展示了项目运行的效果。
3336

被折叠的 条评论
为什么被折叠?



