Skip to content

Commit 63ee1b5

Browse files
committed
CasRestV1Users
1 parent 4da570f commit 63ee1b5

File tree

4 files changed

+132
-76
lines changed

4 files changed

+132
-76
lines changed

maxkey-protocols/maxkey-protocol-cas/src/main/java/org/dromara/maxkey/authz/cas/endpoint/CasRestV1Endpoint.java

Lines changed: 10 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,11 @@
2424
import org.dromara.maxkey.authn.LoginCredential;
2525
import org.dromara.maxkey.authn.provider.AbstractAuthenticationProvider;
2626
import org.dromara.maxkey.authn.web.AuthorizationUtils;
27-
import org.dromara.maxkey.authz.cas.endpoint.response.ServiceResponseBuilder;
2827
import org.dromara.maxkey.authz.cas.endpoint.ticket.CasConstants;
2928
import org.dromara.maxkey.authz.cas.endpoint.ticket.ServiceTicketImpl;
3029
import org.dromara.maxkey.authz.cas.endpoint.ticket.TicketGrantingTicketImpl;
31-
import org.dromara.maxkey.entity.UserInfo;
3230
import org.dromara.maxkey.entity.apps.AppsCasDetails;
3331
import org.dromara.maxkey.util.StringUtils;
34-
import org.dromara.maxkey.web.HttpResponseConstants;
3532
import org.slf4j.Logger;
3633
import org.slf4j.LoggerFactory;
3734
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,9 +41,10 @@
4441
import org.springframework.security.core.Authentication;
4542
import org.springframework.security.core.AuthenticationException;
4643
import org.springframework.stereotype.Controller;
44+
import org.springframework.web.bind.annotation.DeleteMapping;
45+
import org.springframework.web.bind.annotation.GetMapping;
4746
import org.springframework.web.bind.annotation.PathVariable;
48-
import org.springframework.web.bind.annotation.RequestMapping;
49-
import org.springframework.web.bind.annotation.RequestMethod;
47+
import org.springframework.web.bind.annotation.PostMapping;
5048
import org.springframework.web.bind.annotation.RequestParam;
5149

5250
import io.swagger.v3.oas.annotations.Operation;
@@ -61,16 +59,15 @@
6159
@Tag(name = "2-4-CAS REST API文档模块")
6260
@Controller
6361
public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
64-
final static Logger _logger = LoggerFactory.getLogger(CasRestV1Endpoint.class);
62+
static final Logger _logger = LoggerFactory.getLogger(CasRestV1Endpoint.class);
6563

6664
@Autowired
6765
@Qualifier("authenticationProvider")
6866
AbstractAuthenticationProvider authenticationProvider ;
6967

7068
@Operation(summary = "CAS REST认证接口", description = "通过用户名密码获取TGT",method="POST")
71-
@RequestMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1,
72-
method=RequestMethod.POST,
73-
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
69+
@PostMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1,
70+
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
7471
public ResponseEntity<String> casLoginRestTickets(
7572
HttpServletRequest request,
7673
HttpServletResponse response,
@@ -104,21 +101,19 @@ public ResponseEntity<String> casLoginRestTickets(
104101
_logger.error("BadCredentialsException ", e);
105102
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
106103
} catch (final Exception e) {
107-
108104
_logger.error("Exception ", e);
109105
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
110106
}
111107
}
112108

113109
@Operation(summary = "CAS REST认证接口", description = "通过TGT获取ST",method="POST")
114-
@RequestMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1+"/{ticketGrantingTicket}",
115-
method=RequestMethod.POST,
110+
@PostMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1+"/{ticketGrantingTicket}",
116111
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
117112
public ResponseEntity<String> requestServiceTicket(
118113
HttpServletRequest request,
119114
HttpServletResponse response,
120115
@PathVariable("ticketGrantingTicket") String ticketGrantingTicket,
121-
@RequestParam(value=CasConstants.PARAMETER.SERVICE,required=false) String casService,
116+
@RequestParam(value=CasConstants.PARAMETER.SERVICE) String casService,
122117
@RequestParam(value=CasConstants.PARAMETER.RENEW,required=false) String renew,
123118
@RequestParam(value=CasConstants.PARAMETER.REST_USERNAME,required=false) String username,
124119
@RequestParam(value=CasConstants.PARAMETER.REST_PASSWORD,required=false) String password){
@@ -138,8 +133,7 @@ public ResponseEntity<String> requestServiceTicket(
138133
return new ResponseEntity<>("", HttpStatus.BAD_REQUEST);
139134
}
140135
@Operation(summary = "CAS REST认证接口", description = "检查TGT状态",method="GET")
141-
@RequestMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1 + "/{ticketGrantingTicket}",
142-
method=RequestMethod.GET)
136+
@GetMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1 + "/{ticketGrantingTicket}")
143137
public ResponseEntity<String> verifyTicketGrantingTicketStatus(
144138
@PathVariable("ticketGrantingTicket") String ticketGrantingTicket,
145139
HttpServletRequest request,
@@ -157,8 +151,7 @@ public ResponseEntity<String> verifyTicketGrantingTicketStatus(
157151
}
158152

159153
@Operation(summary = "CAS REST认证接口", description = "注销TGT状态",method="DELETE")
160-
@RequestMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1+"/{ticketGrantingTicket}",
161-
method=RequestMethod.DELETE)
154+
@DeleteMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1+"/{ticketGrantingTicket}")
162155
public ResponseEntity<String> destroyTicketGrantingTicket(
163156
@PathVariable("ticketGrantingTicket") String ticketGrantingTicket,
164157
HttpServletRequest request,
@@ -174,62 +167,5 @@ public ResponseEntity<String> destroyTicketGrantingTicket(
174167
}
175168
return new ResponseEntity<>("", HttpStatus.NOT_FOUND);
176169
}
177-
178-
@Operation(summary = "CAS REST认证接口", description = "用户名密码登录接口",method="POST")
179-
@RequestMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_USERS_V1,
180-
method=RequestMethod.POST,
181-
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
182-
public ResponseEntity<String> casLoginRestUsers(
183-
HttpServletRequest request,
184-
HttpServletResponse response,
185-
@RequestParam(value=CasConstants.PARAMETER.SERVICE,required=false) String casService,
186-
@RequestParam(value=CasConstants.PARAMETER.REST_USERNAME,required=true) String username,
187-
@RequestParam(value=CasConstants.PARAMETER.REST_PASSWORD,required=true) String password){
188-
try {
189-
if (password == null || password.isEmpty()) {
190-
throw new BadCredentialsException("No credentials are provided or extracted to authenticate the REST request");
191-
}
192-
193-
LoginCredential loginCredential =new LoginCredential(username,password,"CASREST");
194-
195-
authenticationProvider.authenticate(loginCredential,false);
196-
UserInfo userInfo = AuthorizationUtils.getUserInfo();
197-
TicketGrantingTicketImpl ticketGrantingTicket=new TicketGrantingTicketImpl("Random",AuthorizationUtils.getAuthentication(),null);
198-
199-
String ticket=casTicketGrantingTicketServices.createTicket(ticketGrantingTicket);
200-
String location = applicationConfig.getServerPrefix() + CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1 + ticket;
201-
HttpHeaders headers = new HttpHeaders();
202-
headers.add("location", location);
203-
ServiceResponseBuilder serviceResponseBuilder=new ServiceResponseBuilder();
204-
serviceResponseBuilder.setFormat(HttpResponseConstants.FORMAT_TYPE.JSON);
205-
//for user
206-
serviceResponseBuilder.setAttribute("userId", userInfo.getId());
207-
serviceResponseBuilder.setAttribute("displayName",userInfo.getDisplayName());
208-
serviceResponseBuilder.setAttribute("firstName", userInfo.getGivenName());
209-
serviceResponseBuilder.setAttribute("lastname", userInfo.getFamilyName());
210-
serviceResponseBuilder.setAttribute("mobile", userInfo.getMobile());
211-
serviceResponseBuilder.setAttribute("birthday", userInfo.getBirthDate());
212-
serviceResponseBuilder.setAttribute("gender", userInfo.getGender()+"");
213-
214-
//for work
215-
serviceResponseBuilder.setAttribute("employeeNumber", userInfo.getEmployeeNumber());
216-
serviceResponseBuilder.setAttribute("title", userInfo.getJobTitle());
217-
serviceResponseBuilder.setAttribute("email", userInfo.getWorkEmail());
218-
serviceResponseBuilder.setAttribute("department", userInfo.getDepartment());
219-
serviceResponseBuilder.setAttribute("departmentId", userInfo.getDepartmentId());
220-
serviceResponseBuilder.setAttribute("workRegion",userInfo.getWorkRegion());
221-
222-
serviceResponseBuilder.success().setUser(userInfo.getUsername());
223-
224-
return new ResponseEntity<>(serviceResponseBuilder.serviceResponseBuilder(), headers ,HttpStatus.OK);
225-
} catch (final AuthenticationException e) {
226-
_logger.error("BadCredentialsException ", e);
227-
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
228-
} catch (final Exception e) {
229-
230-
_logger.error("Exception ", e);
231-
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
232-
}
233-
}
234170

235171
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/*
2+
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
18+
/**
19+
*
20+
*/
21+
package org.dromara.maxkey.authz.cas.endpoint;
22+
23+
24+
import org.dromara.maxkey.authn.LoginCredential;
25+
import org.dromara.maxkey.authn.provider.AbstractAuthenticationProvider;
26+
import org.dromara.maxkey.authn.web.AuthorizationUtils;
27+
import org.dromara.maxkey.authz.cas.endpoint.response.ServiceResponseBuilder;
28+
import org.dromara.maxkey.authz.cas.endpoint.ticket.CasConstants;
29+
import org.dromara.maxkey.authz.cas.endpoint.ticket.TicketGrantingTicketImpl;
30+
import org.dromara.maxkey.entity.UserInfo;
31+
import org.dromara.maxkey.web.HttpResponseConstants;
32+
import org.slf4j.Logger;
33+
import org.slf4j.LoggerFactory;
34+
import org.springframework.beans.factory.annotation.Autowired;
35+
import org.springframework.beans.factory.annotation.Qualifier;
36+
import org.springframework.http.HttpHeaders;
37+
import org.springframework.http.HttpStatus;
38+
import org.springframework.http.MediaType;
39+
import org.springframework.http.ResponseEntity;
40+
import org.springframework.security.authentication.BadCredentialsException;
41+
import org.springframework.security.core.AuthenticationException;
42+
import org.springframework.stereotype.Controller;
43+
import org.springframework.web.bind.annotation.PostMapping;
44+
import org.springframework.web.bind.annotation.RequestParam;
45+
46+
import io.swagger.v3.oas.annotations.Operation;
47+
import io.swagger.v3.oas.annotations.tags.Tag;
48+
import jakarta.servlet.http.HttpServletRequest;
49+
import jakarta.servlet.http.HttpServletResponse;
50+
51+
/**
52+
* @author Crystal.Sea
53+
* https://apereo.github.io/cas/6.2.x/protocol/REST-Protocol.html
54+
*/
55+
@Tag(name = "2-4-CAS REST API文档模块")
56+
@Controller
57+
public class CasRestV1UsersEndpoint extends CasBaseAuthorizeEndpoint{
58+
static final Logger _logger = LoggerFactory.getLogger(CasRestV1UsersEndpoint.class);
59+
60+
@Autowired
61+
@Qualifier("authenticationProvider")
62+
AbstractAuthenticationProvider authenticationProvider ;
63+
64+
@Operation(summary = "CAS REST认证接口", description = "用户名密码登录接口",method="POST")
65+
@PostMapping(value=CasConstants.ENDPOINT.ENDPOINT_REST_USERS_V1,
66+
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
67+
public ResponseEntity<String> casLoginRestUsers(
68+
HttpServletRequest request,
69+
HttpServletResponse response,
70+
@RequestParam(value=CasConstants.PARAMETER.SERVICE,required=false) String casService,
71+
@RequestParam(value=CasConstants.PARAMETER.REST_USERNAME,required=true) String username,
72+
@RequestParam(value=CasConstants.PARAMETER.REST_PASSWORD,required=true) String password){
73+
try {
74+
if (password == null || password.isEmpty()) {
75+
throw new BadCredentialsException("No credentials are provided or extracted to authenticate the REST request");
76+
}
77+
78+
LoginCredential loginCredential =new LoginCredential(username,password,"CASREST");
79+
80+
authenticationProvider.authenticate(loginCredential,false);
81+
UserInfo userInfo = AuthorizationUtils.getUserInfo();
82+
TicketGrantingTicketImpl ticketGrantingTicket=new TicketGrantingTicketImpl("Random",AuthorizationUtils.getAuthentication(),null);
83+
84+
String ticket=casTicketGrantingTicketServices.createTicket(ticketGrantingTicket);
85+
String location = applicationConfig.getServerPrefix() + CasConstants.ENDPOINT.ENDPOINT_REST_TICKET_V1 + ticket;
86+
HttpHeaders headers = new HttpHeaders();
87+
headers.add("location", location);
88+
ServiceResponseBuilder serviceResponseBuilder=new ServiceResponseBuilder();
89+
serviceResponseBuilder.setFormat(HttpResponseConstants.FORMAT_TYPE.JSON);
90+
//for user
91+
serviceResponseBuilder.setAttribute("userId", userInfo.getId());
92+
serviceResponseBuilder.setAttribute("displayName",userInfo.getDisplayName());
93+
serviceResponseBuilder.setAttribute("firstName", userInfo.getGivenName());
94+
serviceResponseBuilder.setAttribute("lastname", userInfo.getFamilyName());
95+
serviceResponseBuilder.setAttribute("mobile", userInfo.getMobile());
96+
serviceResponseBuilder.setAttribute("birthday", userInfo.getBirthDate());
97+
serviceResponseBuilder.setAttribute("gender", userInfo.getGender()+"");
98+
99+
//for work
100+
serviceResponseBuilder.setAttribute("employeeNumber", userInfo.getEmployeeNumber());
101+
serviceResponseBuilder.setAttribute("title", userInfo.getJobTitle());
102+
serviceResponseBuilder.setAttribute("email", userInfo.getWorkEmail());
103+
serviceResponseBuilder.setAttribute("department", userInfo.getDepartment());
104+
serviceResponseBuilder.setAttribute("departmentId", userInfo.getDepartmentId());
105+
serviceResponseBuilder.setAttribute("workRegion",userInfo.getWorkRegion());
106+
107+
serviceResponseBuilder.success().setUser(userInfo.getUsername());
108+
109+
return new ResponseEntity<>(serviceResponseBuilder.serviceResponseBuilder(), headers ,HttpStatus.OK);
110+
} catch (final AuthenticationException e) {
111+
_logger.error("BadCredentialsException ", e);
112+
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
113+
} catch (final Exception e) {
114+
115+
_logger.error("Exception ", e);
116+
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
117+
}
118+
}
119+
120+
}

maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/autoconfigure/MaxKeyMvcConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ public void addInterceptors(InterceptorRegistry registry) {
173173
//rest
174174
.excludePathPatterns("/authz/cas/v1/tickets")
175175
.excludePathPatterns("/authz/cas/v1/tickets/*")
176+
.excludePathPatterns("/authz/cas/v1/users")
176177

177178
//OAuth
178179
.addPathPatterns("/authz/oauth/v20/authorize")

maxkey-webs/maxkey-web-maxkey/src/main/java/org/dromara/maxkey/web/interceptor/SingleSignOnInterceptor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ public boolean preHandle(HttpServletRequest request,
6666
throws Exception {
6767
logger.trace("Single Sign On Interceptor");
6868

69-
AuthorizationUtils.authenticateWithCookie(
70-
request,authTokenService,sessionManager);
69+
AuthorizationUtils.authenticateWithCookie(request,authTokenService,sessionManager);
7170

7271
if(AuthorizationUtils.isNotAuthenticated()) {
7372
String loginUrl = applicationConfig.getFrontendUri() + "/#/passport/login?redirect_uri=%s";

0 commit comments

Comments
 (0)